赞
踩
目录
①新建一个 BaseActivity 类
右击 com.example.activitytest 包 --> New --> Kotlin File/Class,在弹出的窗口中输入 BaseActivity,创建类型选择 Class
② 让 BaseActivity 继承自 AppCompatActivity,并重写 onCreate( ) 方法
- /* 为了使 BaseActivity 可以被继承,
- 成为 ActivityTest 项目中所有 Activity 的父类,
- 在类名前面加上 open 关键字
- */
-
- open class BaseActivity : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- // 打印当前实例的类名
- // 获取当前实例的 Class 对象,再调用simpleName 获取当前实例的类名
- Log.d("BaseActivity",javaClass.simpleName)
- }
- }
Kotlin 中的 javaClass 表示获取当前实例的 Class 对象,相当于在 Java 中调用 getClass( ) 方法;而 Kotlin 中的 BaseActivity::class.java 表示获取 BaseActivity 类的 Class 对象,相对于在 java 中调用 BaseActivity.class.
③ 修改 FirstActivity、SecondActivity、ThirdActivity 的继承结构,不再继承 自 AppCompatActivity,而是继承自 BaseActivity 。
④ 重新运行程序,点击按钮分别进入 FirstActivity、SecondActivity、ThirdActivity的界面,观察 Logcat 中的打印信息
停留在 ThirdActivity ,那么退出去需要连按三次 Back 键。按 Home 键只是把程序挂起,并没有退出程序。如果程序需要注销或者退出的功能该怎么办?用一个专门的集合对所有的 Activity 进行管理就可以了。
① 新建一个单例类 ActivityCollector 作为 Activity 的集合
使用单例类是因为全局只需要一个 Activity 集合
- object ActivityCollector {
- private val activities = ArrayList<Activity>()
-
- fun addActivity(activity: Activity){
- activities.add(activity)
- }
-
- fun removeActivity(activity:Activity){
- activities.remove(activity)
- }
-
- // 将 ArrayList 中存储的 Activity 全部销毁
- fun finishAll(){
- for (activity in activities){
- // 销毁 Activity 之前需要判断 Activity 是否正在销毁中
- if(!activity.isFinishing){
- activity.finish()
- }
- }
- activities.clear()
- }
- }
② 修改 BaseActivity 中的代码
- open class BaseActivity : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- // 打印当前实例的类名
- // 获取当前实例的 Class 对象,再调用simpleName 获取当前实例的类名
- Log.d("BaseActivity",javaClass.simpleName)
-
- // 将正在创建的 Activity 添加到集合
- ActivityCollector.addActivity(this)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- // 表示从集合里移除一个马上要销毁的 Activity
- ActivityCollector.removeActivity(this)
- }
- }
③ 不管在哪里退出程序,只需要调用 ActivityCollector.finishAll( ) 方法就可以了
还可以在销毁所有 Activity 的代码后面再加上杀掉当前进程的代码,以保证程序完全退出
android.os.Process.killProcess(android.os.Process.myPid())
killProcess( ) 方法用于杀掉一个进程,接受一个进程id 参数,可以通过 myPid( ) 方法来获得当前程序的进程 id。killProcess( ) 方法只能用于杀掉当前程序的进程,不能用于杀掉其他程序。
SecondActivity 需要两个非常重要的字符串参数,在启动 SecondActivity 的时候必须传递过来,
- val intent = Intent(this,SecondActivity::class.java)
- intent.putExtra("param1","data1")
- intert.putExtra("param2","data2")
- startActivity(intent)
但如果 SecondActivity 不是自己开发的,可能不清楚启动 SecondActivity 需要哪些数据,可以换成以下的写法,修改 SecondActivity 中的代码。
- companion object{
- fun actionStart(context:Context,data1:String,data2:String){
- val intent = Intent(context,SecondActivity::class.java)
- intent.putExtra("param1",data1)
- intent.putExtra("param1",data2)
- context.startActivity(intent)
- }
- }
所有定义在 companion object 中的方法都可以使用类似于 java 静态方法的形式调用。
现在可以清楚的知道启动 SecondActivity 需要传递哪些数据,同时也简化了启动 Activity 的代码,只需要一行代码就可以启动 SecondActivity
- button1.setOnClickListner{
- SecondActivity.actionStart(this,"data1","data2")
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。