Android 第二十六章 Activity

本文介绍了Android中的Activity,包括它在AndroidManifest.xml中的配置,如注册和设置启动模式。详细阐述了Activity的生命周期,从onCreate到onDestroy的各个阶段。同时,讨论了如何启动和传递数据给Activity,以及如何管理Activity,包括退出和使用BaseActivity作为基类来封装共通功能。
摘要由CSDN通过智能技术生成

一、简介

activity:Android四大组件之一,是手机屏幕上看到的界面。

二、配置

需要在AndroidManifest.xml中,注册activity基本信息

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.ActivityDemo"
        tools:targetApi="31">

        <!-- android:exported="true" activity 是否可由其他应用的组件启动-->
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
    </application>

</manifest>

三、生命周期

  1. onCreate 创建、初始化activity
  2. onStart 显示activity 界面
  3. onResume activity 得到焦点和用户进行交互
  4. onPause activity 失去焦点和用户停止交互
  5. onStop 关闭activity 界面,activity处于后台
  6. onDestroy 销毁activity、销毁界面
/**
 * 控件绑定 gradle 中添加  buildFeatures {viewBinding true}
 */

class MainActivity : BaseActivity() {

    val TAG = "MainActivity"

    lateinit var binding: ActivityLoginBinding

    //创建 初始化 Activity
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLoginBinding.inflate(layoutInflater)
        setContentView(binding.root)
        Log.i(TAG, "onCreate")

        binding.btnLogin.setOnClickListener {
            startActivity(Intent(this, MainActivity::class.java))
            finish()
        }
    }

    // 显示界面
    override fun onStart() {
        super.onStart()
        Log.i(TAG, "onStart")
    }

    //获取焦点  用户交互
    override fun onResume() {
        super.onResume()
        Log.i(TAG, "onResume")
    }

    //失去焦点 停止交互
    override fun onPause() {
        super.onPause()
        Log.i(TAG, "onPause")
    }

    //关闭界面  activity 后台运行
    override fun onStop() {
        super.onStop()
        Log.i(TAG, "onStop")
    }

    //销毁页面
    override fun onDestroy() {
        super.onDestroy()
        Log.i(TAG, "onDestroy")
    }

    //重新启动页面
    override fun onRestart() {
        super.onRestart()
        Log.i(TAG, "onRestart")
    }

    //保存数据 手机切换横竖屏测试
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        Log.i(TAG, "onSaveInstanceState")
        outState.putString("username", "admin")
        outState.putString("password", "123456")
    }

    //恢复数据
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        Log.i(TAG, "onRestoreInstanceState")
        var username = savedInstanceState.get("username")
        var password = savedInstanceState.get("password")
        Log.d(TAG, "username:$username password:$password")
    }
}

四、启动模式

需要在AndroidManifest.xml中,activity标签下设置 android:launchMode=“xx”

  1. 默认启动模式 standard:每次启动都会创建一个新的activity 实例 放入栈顶
  2. singleTop: 当前activity处于栈顶 ,则不会创建activity 实例,否则创建新的实例放入栈顶
  3. singleTask:当前activity实例不在栈顶,其上activity实例出栈,该实例处于栈顶,不存在实例 则 创建
  4. singleInstance:创建activity实例放入新的栈中并共享该实例

五、启动activity

	//startActivity(Intent(this, MainActivity::class.java))
	//finish()
	
	//传值
	var intent = Intent(this, MainActivity::class.java)
	intent.putExtra("username", "admin")
	intent.putExtra("password", "123456")
	startActivity(intent)
	finish()
	
	//接收(MainActivity 页面)
	var intent = getIntent()
	var username = intent.getStringExtra("username")
	var password = intent.getStringExtra("password")
    Log.d(TAG, "username:$username ,password:$password")

六、退出activity

备注:参考 第一行代码

object ActivityManageUtil {

    var activityList=ArrayList<Activity>()

    fun addActivity(mActivity: Activity){
        activityList.add(mActivity)
    }

    fun removeActivity(mActivity: Activity){
        activityList.remove(mActivity)
    }

    fun finishAllActivity(){
        for (activity in activityList) {
            if (!activity.isFinishing) {
                activity.finish()
            }
        }

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

        exitProcess(0)
    }
}

七、BaseActivity

备注:用于封装一下Activity 共有的方法等

abstract class BaseActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ActivityManageUtil.addActivity(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        ActivityManageUtil.removeActivity(this)
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值