1. Activity Manager Service (AMS)
作用:
AMS 主要负责管理应用的生命周期和任务栈。它处理应用的启动、暂停、恢复、停止等状态。
它还负责调度系统中的活动(Activity),处理任务切换和多任务管理。
在开发中的使用:
开发者通常不直接与 AMS 交互,但可以通过 Activity 生命周期方法(如 onCreate(), onResume(), onPause())来实现对应用状态的管理。
AMS 还影响到应用的任务栈管理,开发者可以使用 Intent 和 Task Affinity 来控制任务栈的行为。
知识点:
任务栈:Android 使用栈结构管理活动。新活动会推送到栈顶,而返回到之前的活动则会弹出栈顶的活动。
Activity 生命周期:了解生命周期方法是开发和调试应用时必不可少的。
代码示例:
// 示例:在 Activity 中处理生命周期
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化代码
}
@Override
protected void onResume() {
super.onResume();
// Activity 恢复到前台
}
@Override
protected void onPause() {
super.onPause();
// Activity 被置于后台
}
@Override
protected void onDestroy() {
super.onDestroy();
// Activity 被销毁
}
}
2. Package Manager Service (PMS)
作用:
PMS 负责管理应用程序的安装、卸载、查询及其权限。
提供了关于已安装应用的信息,如包名、权限、组件等。
在开发中的使用:
开发者可以使用 PackageManager 类来查询应用信息或进行相关操作。
使用 PackageManager 获取应用权限、安装状态等信息。
知识点:
权限:通过 AndroidManifest.xml 文件声明应用需要的权限,PMS 管理这些权限的请求和验证。
内容提供者:PMS 还涉及内容提供者的注册和管理。
代码示例:
// 示例:使用 PackageManager 查询已安装应用
PackageManager packageManager = getPackageManager();
List<ApplicationInfo> apps = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo app : apps) {
Log.d("AppInfo", "App: " + app.packageName);
}
// 获取应用权限
try {
PackageInfo packageInfo = packageManager.getPackageInfo("com.example.myapp", PackageManager.GET_PERMISSIONS);
String[] requestedPermissions = packageInfo.requestedPermissions;
if (requestedPermissions != null) {
for (String permission : requestedPermissions) {
Log.d("Permission", "Permission: " + permission);
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
3. Window Manager Service (WMS)
作用:
WMS 负责窗口的显示和管理,包括布局、动画和用户交互。
管理系统中的所有窗口,包括活动窗口、对话框、系统提示等。
在开发中的使用:
开发者通过 WindowManager 类来进行窗口的管理,比如设置窗口属性、添加自定义窗口等。
通过 Window 和 View 进行界面的布局和交互。
知识点:
窗口属性:如 WindowManager.LayoutParams,用于设置窗口的各种属性(如大小、位置、样式)。
视图层级:理解视图的层级和绘制顺序对开发具有复杂界面的应用程序非常重要。
代码示例:
// 示例:使用 WindowManager 添加自定义窗口
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
TextView textView = new TextView(this);
textView.setText("This is a custom window");
textView.setBackgroundColor(Color.GREEN);
windowManager.addView(textView, params);