- 博客(28)
- 收藏
- 关注
原创 Wm指令源码
public class Wm extends BaseCommand { private IWindowManager mWm; /** * Command-line entry point. * * @param args The command-line arguments */ public static void mai
2017-03-13 21:41:48 2988
原创 Telecom指令源码
public final class Telecom extends BaseCommand { /** * Command-line entry point. * * @param args The command-line arguments */ public static void main(String[] args) {
2017-03-13 21:40:42 983
原创 sm指令分析
1, 概述Sm主要和android机器的存储相关。主要命令有list-disks/ list-volumes等2,详细流程Sm.java很简单,所以直接附上整个java类,如下public final class Sm { private static final String TAG = "Sm"; IMountService mSm; priva
2017-03-13 21:39:01 15594 2
原创 Settings指令分析
1, 概述Settings指令也是和ContentProvider进行交互,对系统的数据库属性值进行查询、删除和修改。2, Settings详细流程 SettingsCmd的main方法如下,public static void main(String[] args) { if (args == null || args.length < 2) {
2017-03-13 21:37:46 1838
原创 RequestSync分析
1, 概述RequestSync是同步的意思,主要是和ContentResolver进行交互,同步数据库信息。2, RequestSync详细流程 RequestSync的main方法如下,public static void main(String[] args) { try { (new RequestSync()).run(args)
2017-03-13 21:34:42 2834
原创 media指令分析
1, 概述media主要是和SessionManager进行交互,进行多媒体的播放、暂停等操作。主要有三种命令,media dispatch KEY / media list-sessions / mediamonitor.本文主要以media dispatch KEY来论述。 2, media详细流程 Media的main方法如下,public static void
2017-03-13 21:32:31 3236
原创 Input命令分析
1, 概述Input主要是和InputManager进行交互,可以模拟键盘的点击事件,鼠标的滑动点击事件等。平时使用最多的是adb shell input keyevent指令,就以该指令来论述流程,其他类似的指令原理完全一样。2, keyevent详细流程 Input的main方法如下,public static void main(String[] args) {
2017-03-13 19:45:40 2309
原创 ime命令分析
1, 概述ime主要是和InputMethodManager进行交互,获取以及设置系统中的输入法。2, ime命令命令格式:ime 命令列表:命令功能实现方法list获取所有输入法getInputMethodListenable ID设置输入法可用
2017-03-13 19:43:23 1634
原创 dpm命令分析
1, 概述dpm主要是和DevicePolicyManage进行交互,通过用户授权应用设备管理权限后,可以在代码修改很多系统设置。2, dpm命令命令格式:dpm 命令列表:命令功能实现方法set-active-admin激活mDevicePolicyManager.setActiveA
2017-03-13 19:40:38 10475 1
原创 content命令分析
1, 概述content主要是和数据库进行交互,对数据库进行增删改查操作。2, content命令命令格式:contenturi 命令列表:命令功能实现方法insert插入ContentProvider. insertdelete删除delet
2017-03-13 19:39:18 3518
原创 bmgr命令分析
1, 概述bmgr主要是和BackupManagerService进行交互,主要是备份和恢复数据。2, bmgr命令命令格式:bmgr 命令列表:命令功能实现方法backup 包名备份apkBMS. dataChangedrun立即备份bac
2017-03-13 19:36:26 1441
原创 AppWidget命令分析
1, 概述AppWidget是窗口小部件, appwidget命令主要是设置apk是否有放在窗口的权限。2, AppWidget命令命令格式:appwidget 命令列表:命令功能实现方法grantbind允许 权限appWidgetService.setBindAppWidgetPe
2017-03-13 19:33:48 1153
原创 AppOps命令分析
1, 概述AppOps全称是 Application Operations,类似平时常说的应用程序的操作(权限)管理。AppOps是Google原生Android包含的功能,但是Google在每次版本更新时都会隐藏掉AppOps的入口。 2, AppOps命令命令格式:Appops 命令列表:命令功能实现方法
2017-03-13 19:30:05 3832
原创 PM命令分析
1, PM命令命令格式:pm 命令列表:命令功能实现方法list packages列举app包信息PMS.getInstalledPackagesinstall [options] 安装应用PMS.installPackageAsUser
2017-03-13 19:27:31 2750
原创 Am 命令分析
1, AM命令举例:1拨打电话10086adb shell am start -a android.intent.action.CALL -d tel:100862打开网站www.baidu.comadb shell am start -aandroid.intent.action.VIEW -d http://baidu.comam命令还可以启动Activity,Ser
2017-03-13 19:25:13 3457
原创 进程终止分析之二
1, 概述在系统内存较低时就会杀死一些进程,最明显的在卸载一个apk之前会杀死该apk所在的进程。在PMS的deletePackageLI方法中会调用killApplication方法杀死进程。因此,本文以killApplication方法为例来论述杀死进程的过程。当然在android系统中,还有很多情况下会杀死进程,例如在很多异常的时候会直接杀死进程。Java层基本都是在AMS中通过Proc
2017-03-12 21:33:06 1388
原创 进程终止分析之一
1, 概述在系统内存较低时就会杀死一些进程,最明显的在卸载一个apk之前会杀死该apk所在的进程。在PMS的deletePackageLI方法中会调用killApplication方法杀死进程。因此,本文以killApplication方法为例来论述杀死进程的过程。2, 进程终止流程图如下,PMS的killApplication方法如下,private
2017-03-12 21:28:38 2424
原创 进程的生命周期与优先级
1, 进程生命周期Android系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存。 为了确定保留或终止哪些进程,系统会根据进程中正在运行的组件以及这些组件的状态,将每个进程放入“重要性层次结构”中。 必要时,系统会首先消除重要性最低的进程,然后是清除重要性稍低一级的进程,依此类推,以回收系统资源。Android在回收资源的时候,进程被终止的顺序
2017-03-12 21:21:41 1048
原创 进程初始化
1, 进程运行zygoteState创建好进程并且完成初始化操作之后,会调用进程的ActivityThread的main方法, main方法是一个进程最开始执行的地方。public static void main(String[] args) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Activit
2017-03-12 21:19:35 1272
原创 进程启动源码分析
1, 概述在android中,进程的概念被弱化了,主要是四大组件,但是四大组件也运行于进程中;AMS负责管理和调度进程,主要体现在启动进程,动态地根据组件调整进程在mLruProcesses列表中的位置,还可以调整进程的优先级,这2项都和系统的内存回收相关。并且,一个进程里面可以运行多个apk(通过Shareuid的方法),一个apk也可以运行在多个进程里(通过配置Android:
2017-03-12 21:14:56 386
原创 apk卸载分析
1, apk卸载和安装APK过程相对,卸载apk过程如下,1,从PMS的内部结构上删除acitivity、service、provider等信息2,更新Settings中的package信息3.删除code、resource等信息4.删除dex文件 Apk安装时,一般都会走PackageManagerService 中的 installPackage 方法。相反,卸
2017-03-12 09:07:02 2908
原创 apk的安装
1, apk安装方式apk的安装其实就是将外部文件的apk文件复制到 sysytem相关的内部文件中并进行解压等一系列操作。Apk至少有三种安装方式:PackageManagerService(简称PMS), 是android系统中一个核心的服务,它负责系统中Package的管理,应该程序的安装、卸载等.在SystemServer的startBootstrapServices方法启动。
2017-03-12 08:56:06 787
原创 PackageManagerService分析之二
3, 扫描Package第二个阶段的工作主要是扫描系统中的APK,由于需要逐个扫描apk文件,因此手机上安装的程序越多,PKM的工作量越大,系统启动速度越慢,也就是开机时间越长3.1 系统库的dex优化以下的代码主要是对系统库BOOTCLASSPATH指定,或platform.xml定义,或者/system/frameworks目录下的jar和apk包进行一次检查,该dex优化
2017-03-12 08:49:42 892
原创 PackageManagerService分析之一
1, 基本概念PackageManagerService(简称PMS), 是android系统中一个核心的服务,它负责系统中Package的管理,应该程序的安装、卸载等.在SystemServer的startBootstrapServices方法启动。mPackageManagerService = PackageManagerService.main(mSystemContext,
2017-03-12 08:41:11 605
原创 LoaderManager源码分析之二
4, LoadTask三部曲LoadTask继承AsyncTask类,重写了doInBackground/ onPostExecute/ onCancelled三个方法,但是并没有重写onProgressUpdate,所以并不能更新进度信息。 4.1, doInBackgrounddoInBackground方法运行于线程池的线程中。流程图如下,Cursor
2017-03-01 22:35:35 500
原创 LoaderManager源码分析之一
1, 基本概念LoaderManager从名字来看,就是异步任务的意思。LoaderManager是一个抽象类定义如下,public abstract class LoaderManager {还包含一个接口,有三个方法,public interface LoaderCallbacks { public Loader onCreateLoader(int id,
2017-03-01 22:32:07 523
原创 AsyncTask源码分析之二
5,线程切换和管理5.1,线程切换AsyncTask中4个方法执行所在的线程如下,是如何切换的呢?onPreExecute //主线程,执行任务之前的一些UI操作doInBackground //子线程,执行任务onProgressUpdate // 任务执行时更新进度信息onPostExecute // 主线程,任务完成时更新UI利用内部类Inter
2017-03-01 22:08:29 227
原创 线程池分析
1,线程池当进程中线程较少时,可以手动去新建thread。但是如果大量的线程会使进程管理很混乱,并且不断的创建销毁线程影响性能。在此情况下,线程池诞生了。线程池优点如下,减少创建和销毁线程的次数,每个工作线程可以多次使用可根据系统情况调整执行的线程数量,防止消耗过多内存。2 ThreadPoolExecutor2.1 构造方法AsyncTask构造ThreadPoolExe
2017-03-01 21:57:08 333
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人