Activity的最佳实践

本文介绍了如何在Android中实现Activity的最佳实践,包括通过BaseActivity跟踪当前活动、使用单例ActivityCollector随时退出程序以及启动Activity的优雅方式。通过BaseActivity的onCreate和onDestroy方法管理Activity生命周期,并提供了一个actionStart()静态方法简化启动新Activity的步骤。
摘要由CSDN通过智能技术生成

Activity的最佳实践

知晓当前是在哪一个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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值