Android Activity状态与操作探究
z啵唧啵唧 人气:0知晓当前是在哪一个Activiy
创建一个BaseActivity类,继承AppCompatActivity类.重写onCreate方法
open class BaseActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //Kotlin当中的javaClass表示获取当前实例的Class对象,相当于在java当中调用getClass()方法 //而Kotlin当中的BaseActivity::class.java表示获取BaseActivity类的Class对象,相当于java当中的BaseActivity.class //javaClass.simpleName 表示获取当前实例的对象然后调用simpleName获取当前实例的类名 Log.d("BaseActivity", javaClass.simpleName) } }
修改FirstActivity等的代码,让他们不再继承AppCompatActivity而是继承自BaseAvtivity
记住要想让自己能够被别人所继承,要在class前面加上open关键字
运行项目代码依次点击按钮进入相应的Activity,观察日志输出,现在我们每当进入一个Activity的界面,该Activity的类名就会被打印出来了,这样我们就能够知道当前的界面是哪一个Activity了
随时随地退出程序
创建一个单例类,用来管理所有的activity
package com.zb.activitytest.util import android.app.Activity /** * 单例类,专门用来管理所有的Activity */ object ActivityCollector { //创建一个ArrayList集合,用来存放所有的Activity private val activities = ArrayList<Activity>() //往集合当中添加Activity的方法 fun addActivity(activity: Activity) { activities.add(activity) } //删除集合当中的Activity的方法 fun removeActivity(activity: Activity) { activities.remove(activity) } //销毁所有的Activity的方法 fun finishAll() { //遍历集合 for (activity in activities) { //判断当前activity是否是正在销毁的状态 if (!activity.isFinishing) { //如果不是正在销毁的阶段,那么我们就调用activity的finish方法,将其进行销毁 activity.finish() } } activities.clear() } }
修改BaseActivity中的代码
open class BaseActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //Kotlin当中的javaClass表示获取当前实例的Class对象,相当于在java当中调用getClass()方法 //而Kotlin当中的BaseActivity::class.java表示获取BaseActivity类的Class对象,相当于java当中的BaseActivity.class //javaClass.simpleName 表示获取当前实例的对象然后调用simpleName获取当前实例的类名 Log.d("BaseActivity", javaClass.simpleName) //当回调onCreate()方法的时候,应该往集合当中添加当前activity的实例 ActivityCollector.addActivity(this) } override fun onDestroy() { super.onDestroy() //当回调onDestroy()方法的时候,应该删除集合当中的activity实例 ActivityCollector.removeActivity(this) } }
以后不论在程序的哪个位置,想要直接退出程序的话,只需要调用ActivityCollector.finishAll()方法即可
当然还可以在销毁Activity的代码后面加上杀掉当前进程的代码,以保证程序可以完全的退出
//杀死当前进程 android.os.Process.killProcess(android.os.Process.myPid())
启动Activity的最佳写法
在自己的Activity中定义一个actionStart()方法,在里面包装自己需要的参数
例如SecondActivity中写一个actionStart()方法
/** * activity的最佳启动方式,方便告知别的activity(想要启动本activity)在启动activity时需要传递的数据是什么 */ companion object { fun actionStart(context: Context, data1: String, data2: String) { val intent = Intent(context, SecondActivity::class.java) intent.putExtra("data1", data1) intent.putExtra("data2", data2) context.startActivity(intent) } }
FirstActivity在跳转到SecondActivity的时候就知道自己要给对方传递什么数据了,而且这种方式启动activity只需要一行代码即可
SecondActivity.actionStart(this, "1111", "2222")
加载全部内容