当前位置:   article > 正文

Android应用开发:Activity(5)_android单activity应用

android单activity应用

目录

8、Activity 的最佳实践

(1)知晓当前是在哪一个 Activity

(2)随时随地退出程序

(3)启动 Activity 的最佳写法


8、Activity 的最佳实践

(1)知晓当前是在哪一个 Activity

①新建一个 BaseActivity 类

右击 com.example.activitytest 包 --> New --> Kotlin File/Class,在弹出的窗口中输入 BaseActivity,创建类型选择 Class

② 让 BaseActivity 继承自 AppCompatActivity,并重写 onCreate( ) 方法

  1. /* 为了使 BaseActivity 可以被继承,
  2. 成为 ActivityTest 项目中所有 Activity 的父类,
  3. 在类名前面加上 open 关键字
  4. */
  5. open class BaseActivity : AppCompatActivity() {
  6. override fun onCreate(savedInstanceState: Bundle?) {
  7. super.onCreate(savedInstanceState)
  8. // 打印当前实例的类名
  9. // 获取当前实例的 Class 对象,再调用simpleName 获取当前实例的类名
  10. Log.d("BaseActivity",javaClass.simpleName)
  11. }
  12. }

        Kotlin 中的 javaClass 表示获取当前实例的 Class 对象,相当于在 Java 中调用 getClass( ) 方法;而 Kotlin 中的 BaseActivity::class.java 表示获取 BaseActivity 类的 Class 对象,相对于在 java 中调用 BaseActivity.class.

③ 修改 FirstActivity、SecondActivity、ThirdActivity 的继承结构,不再继承 自 AppCompatActivity,而是继承自 BaseActivity 。

④ 重新运行程序,点击按钮分别进入 FirstActivity、SecondActivity、ThirdActivity的界面,观察 Logcat 中的打印信息

(2)随时随地退出程序

        停留在 ThirdActivity ,那么退出去需要连按三次 Back 键。按 Home 键只是把程序挂起,并没有退出程序。如果程序需要注销或者退出的功能该怎么办?用一个专门的集合对所有的 Activity 进行管理就可以了。

① 新建一个单例类 ActivityCollector 作为 Activity 的集合

使用单例类是因为全局只需要一个 Activity 集合

  1. object ActivityCollector {
  2. private val activities = ArrayList<Activity>()
  3. fun addActivity(activity: Activity){
  4. activities.add(activity)
  5. }
  6. fun removeActivity(activity:Activity){
  7. activities.remove(activity)
  8. }
  9. // 将 ArrayList 中存储的 Activity 全部销毁
  10. fun finishAll(){
  11. for (activity in activities){
  12. // 销毁 Activity 之前需要判断 Activity 是否正在销毁中
  13. if(!activity.isFinishing){
  14. activity.finish()
  15. }
  16. }
  17. activities.clear()
  18. }
  19. }

② 修改 BaseActivity 中的代码

  1. open class BaseActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. // 打印当前实例的类名
  5. // 获取当前实例的 Class 对象,再调用simpleName 获取当前实例的类名
  6. Log.d("BaseActivity",javaClass.simpleName)
  7. // 将正在创建的 Activity 添加到集合
  8. ActivityCollector.addActivity(this)
  9. }
  10. override fun onDestroy() {
  11. super.onDestroy()
  12. // 表示从集合里移除一个马上要销毁的 Activity
  13. ActivityCollector.removeActivity(this)
  14. }
  15. }

不管在哪里退出程序,只需要调用 ActivityCollector.finishAll( ) 方法就可以了

还可以在销毁所有 Activity 的代码后面再加上杀掉当前进程的代码,以保证程序完全退出

android.os.Process.killProcess(android.os.Process.myPid())

        killProcess( ) 方法用于杀掉一个进程,接受一个进程id 参数,可以通过 myPid( ) 方法来获得当前程序的进程 id。killProcess( ) 方法只能用于杀掉当前程序的进程,不能用于杀掉其他程序。

(3)启动 Activity 的最佳写法

SecondActivity 需要两个非常重要的字符串参数,在启动 SecondActivity 的时候必须传递过来,

  1. val intent = Intent(this,SecondActivity::class.java)
  2. intent.putExtra("param1","data1")
  3. intert.putExtra("param2","data2")
  4. startActivity(intent)

但如果 SecondActivity 不是自己开发的,可能不清楚启动 SecondActivity 需要哪些数据,可以换成以下的写法,修改 SecondActivity 中的代码。

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

所有定义在 companion object 中的方法都可以使用类似于 java 静态方法的形式调用。

现在可以清楚的知道启动 SecondActivity 需要传递哪些数据,同时也简化了启动 Activity 的代码,只需要一行代码就可以启动 SecondActivity

  1. button1.setOnClickListner{
  2. SecondActivity.actionStart(this,"data1","data2")
  3. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/157239?site
推荐阅读
相关标签
  

闽ICP备14008679号