[Android]App生命周期
类似iOS的applicationWillEnterForeground:等方法
以下是使用 Application.ActivityLifecycleCallbacks 接口来监听应用启动和进入前台的示例代码。
创建一个自定义的 ActivityLifecycleCallbacks
首先,创建一个实现 Application.ActivityLifecycleCallbacks 的类:
import android.app.Activity
import android.app.Application
import android.content.Intent
import android.os.Bundle
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.mofsaas.www.utils.NSLog
/// APP生命周期
class AppLifecycleCallbacks : Application.ActivityLifecycleCallbacks {
private var activityReferences = 0
private var isActivityChangingConfigurations = false
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
// 可选:在 Activity 创建时执行任务
}
override fun onActivityStarted(activity: Activity) {
if (++activityReferences == 1 && !isActivityChangingConfigurations) {
// 应用进入前台
NSLog("应用进入前台, App has entered the foreground")
handleAppOpened()
// 发送广播通知
val intent = Intent("com.example.ACTION_APP_OPENED")
LocalBroadcastManager.getInstance(activity).sendBroadcast(intent)
}
}
override fun onActivityResumed(activity: Activity) {
// 可选:在 Activity 恢复时执行任务
}
override fun onActivityPaused(activity: Activity) {
// 可选:在 Activity 暂停时执行任务
}
override fun onActivityStopped(activity: Activity) {
isActivityChangingConfigurations = activity.isChangingConfigurations
if (--activityReferences == 0 && !isActivityChangingConfigurations) {
// 应用进入后台
NSLog("应用进入后台, App has entered the background")
}
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
// 可选:在保存 Activity 状态时执行任务
}
override fun onActivityDestroyed(activity: Activity) {
// 可选:在 Activity 销毁时执行任务
}
private fun handleAppOpened() {
// 要处理的任务
NSLog("要处理的任务, Handling app opened tasks")
checkForUpdates()
refreshUserData()
}
private fun checkForUpdates() {
// 检查应用更新的逻辑
NSLog("检查应用更新的逻辑, Checking for updates...")
}
private fun refreshUserData() {
// 刷新用户数据的逻辑
NSLog("刷新用户数据的逻辑, Refreshing user data...")
}
}
在 Application 类中注册 ActivityLifecycleCallbacks
接下来,在自定义的 Application 类中注册这个 ActivityLifecycleCallbacks:
import android.app.Application
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
// 注册 ActivityLifecycleCallbacks
registerActivityLifecycleCallbacks(AppLifecycleCallbacks())
}
}
在 AndroidManifest.xml 中指定自定义 Application 类
确保在 AndroidManifest.xml 中指定你的自定义 Application 类:
<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- 其他标签 -->
</application>