赞
踩
目录
Android中Activity的启动模式有四种,分别是:
onNewIntent
方法会被调用。如果Activity不在栈顶,还是会重新创建一个新的实例。onNewIntent
方法,并把在它之上的所有其他Activity实例统统出栈,如果不存在,则新建实例。onNewIntent
解释在Android开发中,onNewIntent(Intent)
是Activity
的一个回调方法。当当前Activity启用了singleTop
、singleTask
或singleInstance
启动模式,并且该Activity已经存在于任务栈中时,再次启动该Activity不会创建一个新的实例,而是会调用现有实例的onNewIntent(Intent)
方法,并传入新的Intent。这个方法允许Activity更新其内容而不需要重新创建。
Activity启动模式的选择主要考虑以下几个方面:
onNewIntent
方法来更新Activity的显示内容而不是创建新的实例。代码上,首先需要在AndroidManifest.xml
中定义Activity的启动模式。比如设置MainActivity
的启动模式为singleTop
- <activity android:name=".MainActivity"
- android:launchMode="singleTop">
- </activity>
然后,在MainActivity
中重写onNewIntent
方法:
- class MainActivity : AppCompatActivity() {
- override fun onNewIntent(intent: Intent?) {
- super.onNewIntent(intent)
-
- }
- }
Service有两种启动方式:
startService(Intent)
来启动。Service将在后台无限期运行,即使启动它的组件已被销毁也如此。需要通过stopSelf()
或stopService(Intent)
来停止Service。bindService(Intent, ServiceConnection, int)
来实现。Service与调用组件绑定,调用组件如果被销毁了,Service也会被销毁。IntentService:是Service的子类,用于处理异步请求(执行在工作线程)。客户端通过startService(Intent)
方法发送请求,该服务在每次处理完后自动停止,不需要手动停止。
ContentProvider提供了一种在不同应用程序间共享数据的方式。它可以封装数据,并对外提供统一的访问接口。是多线程和多进程安全的,但具体实现时需要考虑线程同步问题。
BroadcastReceiver可以通过两种方式注册:
静态注册的BroadcastReceiver即使应用没有运行,也可以接收到广播。动态注册的BroadcastReceiver只有在其注册的上下文(通常是Activity或Service)存在时才能接收广播。
广播可以是有序的也可以是无序的。有序广播(ordered broadcasts)可以被接收者中断,即一个接收者可以阻止进一步传播。无序广播(normal broadcasts)则不能被中断,所有注册了的接收者都会接收到。
AsyncTask用于在后台线程中执行短暂的任务,并可以在主线程中更新UI。它简化了线程和Handler的使用。AsyncTask的主要方法包括:
doInBackground(Params...)
:后台执行的任务。onPostExecute(Result)
:后台任务执行完后在主线程中执行。onProgressUpdate(Progress...)
:更新进度信息。从Android 4.0开始,AsyncTask默认在一个单线程池中串行执行任务,但也可以通过executeOnExecutor
方法在多线程池中并行执行。
PS:由于AsyncTask容易导致内存泄漏和对生命周期的管理不便,它在Android开发中逐渐被其他现代的异步处理方案所取代,如使用LiveData
和ViewModel
结合Kotlin Coroutines
。
ViewModel
是一个负责为UI准备数据的类,它能够管理界面相关的数据,并且能够在配置改变(如屏幕旋转)后继续存在。ViewModel
的目的是从UI控制器中分离出数据获取的逻辑,使得数据可以持久化。
LiveData
是一个可观察的数据存储器类,它遵循观察者模式。与普通的观察者不同,LiveData
是生命周期感知的,意味着它尊重Android组件(如Activity、Fragment)的生命周期,确保只有在组件处于活跃状态时才会通知数据变化。
Kotlin Coroutines
是一种轻量级的线程管理工具,它通过使用挂起函数来简化异步编程,让异步代码看起来更像是同步代码。它能够使代码非阻塞地执行,同时不会牺牲应用的性能。
将LiveData、ViewModel和Kotlin Coroutines结合使用可以创建一个高效、易于维护和测试的数据流。
LiveData
来存储这些数据。因为LiveData
是生命周期感知的,所以它会在Activity或Fragment活跃时自动更新UI。代码上,首先定义一个ViewModel,它包含LiveData来存储和管理UI相关数据
- class MainViewModel : ViewModel() {
- private val _data = MutableLiveData<String>()
- val data: LiveData<String> = _data
-
- fun fetchData() {
- viewModelScope.launch {
- val result = withContext(Dispatchers.IO) { // 在IO线程中执行
- repository.getData()
- }
- _data.value = result
- }
- }
- }
在Activity或Fragment中观察LiveData数据变化,并更新UI
- class MainActivity : AppCompatActivity() {
- private val viewModel: MainViewModel by viewModels()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
-
- viewModel.data.observe(this, Observer { data ->
- textView.text = data
- })
-
- viewModel.fetchData()
- }
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。