activitymanagerservice详解
时间: 2023-04-12 12:05:15 浏览: 130
ActivityManagerService是Android系统中的一个重要服务,负责管理应用程序的生命周期、任务栈、进程等。它是Android系统中的一个核心组件,是整个系统的管理者。
ActivityManagerService主要有以下几个功能:
1. 管理应用程序的生命周期:ActivityManagerService负责启动、停止、销毁应用程序中的Activity,以及管理应用程序的进程。
2. 管理任务栈:ActivityManagerService负责管理应用程序的任务栈,包括任务栈的创建、销毁、切换等。
3. 管理进程:ActivityManagerService负责管理应用程序的进程,包括进程的创建、销毁、优先级调整等。
4. 管理系统资源:ActivityManagerService负责管理系统资源,包括内存、CPU等资源的分配和管理。
总之,ActivityManagerService是Android系统中非常重要的一个服务,它的作用是协调和管理整个系统中的应用程序和进程,确保系统的稳定性和流畅性。
相关问题
activitymanagerservice
ActivityManagerService 是 Android 操作系统中的一个系统服务,它负责管理系统中所有的 Activity。它主要负责启动、结束、调度 Activity,还负责管理进程的生命周期。 ActivityManagerService 在 Android 框架中起着重要的作用,它是 Android 应用程序管理的核心。
ActivityManagerService anr 源码
ActivityManagerService是负责监控应用程序的响应情况的服务,当应用程序出现ANR时,该服务会弹出ANR对话框。其ANR相关的源码如下:
1. 监控应用程序响应状态:ActivityManagerService会周期性地检测所有应用程序的响应状态,如果应用程序长时间未响应,就会触发ANR,代码如下:
```
private void checkAppTimeLimitLocked(ProcessRecord app) {
// Check if the app has exceeded its time limits.
if (app.notResponding) {
return; // Don't kill the app if it is already not responding.
}
final boolean isSilentANR = mService.mDidDexOpt;
final long now = SystemClock.uptimeMillis();
final long maxTime = isSilentANR ? mConstants.SANE_ANR_TIMEOUT : mConstants.ANR_TIMEOUT;
final long timeSinceUnfrozen = now - app.lastStateTime;
final boolean overTimeLimit = timeSinceUnfrozen > maxTime;
if (DEBUG_ANR) {
Slog.i(TAG, "checkAppTimeLimitLocked: " + app + " timeSinceUnfrozen=" + timeSinceUnfrozen
+ " maxTime=" + maxTime + " over=" + overTimeLimit);
}
if (overTimeLimit) {
makeAppNotRespondingLocked(app, null, null, 0, "time limit exceeded", isSilentANR);
}
}
```
2. 触发ANR:当应用程序长时间未响应时,ActivityManagerService会调用makeAppNotRespondingLocked方法触发ANR,代码如下:
```
void makeAppNotRespondingLocked(ProcessRecord app, String reason, String shortMsg, int flags,
String message, boolean isSilentANR) {
if (app.notResponding) {
return;
}
mService.addErrorToDropBox("anr", app, app.processName, null, null, reason, message, null, null);
...
// Show the ANR to the user.
Message msg = Message.obtain();
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("app", app);
map.put("shortMsg", shortMsg);
map.put("flags", flags);
map.put("isSilentANR", isSilentANR);
msg.obj = map;
mHandler.sendMessage(msg);
...
}
```
3. 弹出ANR对话框:当应用程序出现ANR时,ActivityManagerService会通过Handler向主线程发送消息,弹出ANR对话框,代码如下:
```
private final class UiHandler extends Handler {
public UiHandler() {
super(mService.mHandler.getLooper());
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SHOW_NOT_RESPONDING_UI_MSG: {
HashMap<String, Object> data = (HashMap<String, Object>) msg.obj;
ProcessRecord app = (ProcessRecord) data.get("app");
String shortMsg = (String) data.get("shortMsg");
int flags = (Integer) data.get("flags");
boolean isSilentANR = (Boolean) data.get("isSilentANR");
...
// Display the ANR dialog.
mActivityManagerInternal.showAppErrorUi(app.pid, app.info.packageName, shortMsg, null,
null, flags, isSilentANR);
...
break;
}
...
}
}
}
```
以上就是ActivityManagerService中ANR相关的源码。