前言
最近在看源码的时候,被各种XXXManager和XXXManagerService搞得有点懵,故而想整理整理这些常用的XXXManager和XXXManagerService,增强记忆。本文使用的是Android SDK 27,源码Android 8.0。
常用Manager
Manager | 说明 | ManagerService |
---|---|---|
ActivityManager | 提供与activities,services和containing process进行交互的功能 | ActivityManagerService |
AlarmManager | 提供访问系统警报服务的功能 | AlarmManagerService |
AppWidgetManager | 提供管理widget的相关功能 | AppWidgetService |
ConnectivityManager | 提供查询网络连接状态相关功能 | ConnectivityService |
DownloadManager | 提供处理长时间运行HTTP下载的服务 | |
FragmentManager | 提供在Activity中与之交互的接口 | |
LocationManager | 提供访问系统位置的服务 | LocationManagerService |
NotificationManager | 通知用户发生的事件,常常是后台事件 | NotificationManagerService |
PackageManager | 用于检索与当前安装在设备上的应用程序包相关的各种信息 | PackageManagerService |
TelephonyManager | 提供访问设备上的电话服务相关信息的功能 | |
WindowManager | 提供窗口管理器的接口 | WindowManagerService |
各部分功能
1.ActivityManager
SDK定义:This class gives information about, and interacts with, activities, services, and the containing process.
根据SDK文档的说明,这个类提供了关于与activities、services和进程交互的一些信息。其中还提到这个类的大部分方法是用来调试的,并且应用开发者不需要使用到这个类。当然,对于一些特殊的情况,该类提供了一些方法给用户调用来获取必要的信息,后面会介绍几个常见的方法。
获取ActivityManager对象的方法是在拥有context的环境下使用:
ActivityManager activityManager= (ActivityManager) getSystemService(ACTIVITY_SERVICE);
或者
ActivityManager activityManager= (ActivityManager) getSystemService(ActivityManager.class);
ActivityManager常用的方法:
- clearApplicationUserData:从磁盘中清除应用的数据,但是不会移除这个已经安装的应用;
- getAppTasks:获取当前应用的task列表;
- getDeviceConfigurationInfo:获取设备配置属性;
- getMemoryInfo:获取系统内存信息;
- getProcessMemoryInfo:获取一个或多个进程占用的内存信息;
- killBackgroundProcesses:系统立刻杀死给定包里的所有后台进程,需要KILL_BACKGROUND_PROCESSES权限;
- moveTaskToFront:将给定id的task移到前台,这时它将对用户可见,需要REORDER_TASKS权限;
而ActivityManager的大部分方法是通过getService()来是现实的,而getService()方法返回的是IActivityManager,而ActivityManagerNative实现了IActivityManager接口,接着会调用到ActivityManagerNative的getDefault(),它返回的是ActivityManagerService对象,这期间涉及了IPC过程。那么