知晓当前时哪一个activity

直接创建一个kotlin的类,,他与Activity的创建方法不一样。
创建BaseActivity类

1
2
3
4
5
6
7
8
open class BaseActivity:AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("BaseActivity",javaClass.simpleName)
//javaClass表示获取当前实例的class对象,相当于在java中调用getClass方法
//::class.java表示获取BaseActivity类的Class对象。相当于在Java中调用BaseActivity.class反射
ActivityCollector.addActivity(this)
}

然后在把其他的类从继承AppCompatActivity改为BaseActivity。这样,每个Activity在启动时,都会继承父类的方法,然后输出他的类名。就可以知晓当前是哪个Activity

随时随地退出程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//所有activity的集合
//单例模式
object ActivityCollector{
private val actvities = ArrayList<Activity>()
fun addActivity(activity: Activity){
actvities.add(activity)
}
fun removeActivity(activity: Activity){
actvities.remove(activity)
}
fun finishAll(){
for(activity in actvities){
if (!activity.isFinishing)
activity.finish()
}
actvities.clear()
}
}

调用这个单例,在每个onCreate()方法执行时,调用addActivity(),然后在每个onDestroy()方法中,调用removeActivity()方法。
然后可以绑定一个案件绑定finishAll()一次性关闭所有的Activity。

启动Activity的最佳写法

一般启动Activity的方法,就是通过调用startActivity()或者startforResult()来将Activiyty启动起来。
但如果启动另一个Activity需要传入参数的话,往往需要查看文档或者问其开发人员。而这就会降低效率。
这里推荐到最佳写法就是将启动类封装在一个kotlin的伴生类中,(类似静态方法)。

1
2
3
4
5
6
7
8
9
10
class ActivitySecond : BaseActivity() {
companion object{
fun actionStart(context: Context,data1:String,data2:String){
val intent = Intent(context,ActivitySecond::class.java)
intent.putExtra("data1",data1)
intent.putExtra("data2",data2)
context.startActivity(intent)
}
}
}

然后在需要启动ActivitySecond的地方,调用该方法。

1
ActivitySecond.actionStart(this,"data1","data2")

来启动这个方法。这样就把上下文参数和数据都传过去了。