赞
踩
Activity
的启动模式(Launch Modes)Android 提供了几种不同的启动模式,用于定义 Activity
的启动行为。这些模式通过 AndroidManifest.xml
文件中的 android:launchMode
属性或 Intent
标志进行配置。
这是默认的启动模式。每次启动 Activity
都会创建一个新的实例,无论该 Activity
是否已经存在于栈中。
<activity android:name=".MyActivity"
android:launchMode="standard">
</activity>
如果当前任务的栈顶已经有该 Activity
实例,则重用该实例,并调用其 onNewIntent
方法,否则创建新的实例。
<activity android:name=".MyActivity"
android:launchMode="singleTop">
</activity>
使用 Intent
标志也可以实现相同效果:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
在栈中只保留一个 Activity
实例。如果实例存在,则将其置于栈顶,并调用其 onNewIntent
方法,否则创建新的实例。
<activity android:name=".MyActivity"
android:launchMode="singleTask">
</activity>
创建一个单独的任务栈来管理该 Activity
,并且在该任务栈中只存在这一个 Activity
实例。
<activity android:name=".MyActivity"
android:launchMode="singleInstance">
</activity>
Intent
是 Android 中用于在不同组件(如 Activity
、Service
和 BroadcastReceiver
)之间传递数据和请求操作的消息对象。主要分为两种类型:
Intent
:明确指定目标组件的 Intent
。Intent
:不指定目标组件,通过 Intent Filter
进行匹配。显式 Intent
示例:
Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);
隐式 Intent
示例:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.example.com"));
startActivity(intent);
Intent Filter
用于在 AndroidManifest.xml
中声明 Activity
、Service
或 BroadcastReceiver
能够响应的 Intent
类型。
<activity android:name=".MyActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http" android:host="www.example.com"/>
</intent-filter>
</activity>
默认情况下,每个应用程序在独立的 Linux 进程中运行。应用程序中的所有组件(Activity
、Service
、BroadcastReceiver
和 ContentProvider
)都在同一个进程中运行。
可以在 AndroidManifest.xml
中通过 android:process
属性为某些组件指定不同的进程:
<activity android:name=".MyActivity"
android:process=":remote"/>
Android 的主线程(也称为 UI 线程)用于处理 UI 更新和用户交互。因此,不能在主线程中执行耗时的操作,以避免阻塞 UI 响应。可以使用 AsyncTask
、HandlerThread
或 Executor
框架在后台线程中执行耗时操作。
使用 AsyncTask
进行后台操作:
private class DownloadTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
// Perform background task
}
protected void onProgressUpdate(Integer... progress) {
// Update UI progress
}
protected void onPostExecute(Long result) {
// Update UI with result
}
}
Service
是在后台运行的组件,用于执行长时间运行的操作。Activity
可以通过 startService
和 bindService
与 Service
交互。
startService
用于启动服务:
Intent intent = new Intent(this, MyService.class);
startService(intent);
bindService
用于绑定服务,并获取 IBinder
以进行通信:
Intent intent = new Intent(this, MyService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
ServiceConnection
用于管理 Service
的连接和断开:
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyService.LocalBinder binder = (MyService.LocalBinder) service;
myService = binder.getService();
isBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
isBound = false;
}
};
Android Activity
的设计涉及多个方面,包括生命周期管理、启动模式、视图管理、进程和线程模型、以及与其他组件(如 Fragment
和 Service
)的交互。理解 Activity
的设计原理和内部实现,有助于开发者构建高效、稳定和响应迅速的应用程序。通过深入分析和理解这些关键概念,开发者可以在实际项目中灵活应用这些知识,提升应用程序的用户体验和性能。
欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。