May


  • 首页

  • 关于

  • 分类

  • 归档

  • 搜索

APP启动过程

发表于 2019-05-11 | 分类于 GuideBook , Android |
APP启动过程 上图就可以很好的说明App启动的过程 ActivityManagerService组织回退栈时以ActivityRecord为基本单位,所有的ActivityRecord放在同一个ArrayList里,可以将mHistory看作一个栈对象,索引0所指的对象位于栈底,索引mHistory.size()-1所指的对象位于栈顶 Zygote进程孵化出新的应用进程后,会执行ActivityThread类的main方法.在该方法里会先准备好Looper和消息队列,然后调用attach方法将应用进程绑定到ActivityManagerService,然后进入loop循环,不断地读取消息 ...
阅读全文 »

AIDL

发表于 2019-05-11 | 分类于 GuideBook , Android |
AIDL 创建一个接口,再里面定义方法 123456package com.example.taidl; interface ICalcAIDL { int add(int x , int y); int min(int x , int y ); } build一下gen目录下会生成ICalcAIDL.java文件 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626 ...
阅读全文 »

Activity启动过程

发表于 2019-05-11 | 分类于 GuideBook , Android |
Activity启动过程 一些基本的概念 ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期 ActivityThread,App的真正入口。当开启App之后,会调用main()开始运行,开启消息循环队列,这就是传说中的UI线程或者叫主线程。与ActivityManagerServices配合,一起完成Activity的管理工作 ApplicationThread,用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityManagerService需要管理相关Applicati ...
阅读全文 »

Android关于OOM的解决方案

发表于 2019-05-11 | 分类于 GuideBook , Android |
Android关于OOM的解决方案OOM 内存溢出(Out Of Memory) 也就是说内存占有量超过了VM所分配的最大 出现OOM的原因 加载对象过大 相应资源过多,来不及释放 如何解决 在内存引用上做些处理,常用的有软引用、强化引用、弱引用 在内存中加载图片时直接在内存中作处理,如边界压缩 动态回收内存 优化Dalvik虚拟机的堆内存分配 自定义堆内存大小
阅读全文 »

Android图片中的三级缓存

发表于 2019-05-11 | 分类于 GuideBook , Android |
Android图片中的三级缓存 为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响 特别是,当我们想要重复浏览一些图片时,如果每一次浏览都需要通过网络获取,流量的浪费可想而知 所以提出三级缓存策略,通过网络、本地、内存三级缓存图片,来减少不必要的网络交互,避免浪费流量 什么是三级缓存 网络加载,不优先加载,速度慢,浪费流量 本地缓存,次优先加载,速度快 内存缓存,优先加载, ...
阅读全文 »

Android开机过程

发表于 2019-05-11 | 分类于 GuideBook , Android |
Android开机过程 BootLoder引导,然后加载Linux内核. 0号进程init启动.加载init.rc配置文件,配置文件有个命令启动了zygote进程 zygote开始fork出SystemServer进程 SystemServer加载各种JNI库,然后init1,init2方法,init2方法中开启了新线程ServerThread. 在SystemServer中会创建一个socket客户端,后续AMS(ActivityManagerService)会通过此客户端和zygote通信 ServerThread的run方法中开启了AMS,还孵化新进程ServiceManager,加载注 ...
阅读全文 »

Android性能优化

发表于 2019-05-11 | 分类于 GuideBook , Android |
Android性能优化 合理管理内存 节制的使用Service如果应用程序需要使用Service来执行后台任务的话,只有当任务正在执行的时候才应该让Service运行起来。当启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,系统可以在LRUcache当中缓存的进程数量也会减少,导致切换程序的时候耗费更多性能。我们可以使用IntentService,当后台任务执行结束后会自动停止,避免了Service的内存泄漏。 当界面不可见时释放内存当用户打开了另外一个程序,我们的程序界面已经不可见的时候,我们应当将所有和界面相关的资源进行释放。重写Activity的onTrim ...
阅读全文 »

Android系统机制

发表于 2019-05-11 | 分类于 GuideBook , Android |
Android系统机制 APP启动过程 Launcher线程捕获onclick的点击事件,调用Launcher.startActivitySafely,进一步调用Launcher.startActivity,最后调用父类Activity的startActivity。 Activity和ActivityManagerService交互,引入Instrumentation,将启动请求交给Instrumentation,调用Instrumentation.execStartActivity Android内核解读-应用的安装过程http://blog.csdn.net/singwhatiwann ...
阅读全文 »

AsyncTask

发表于 2019-05-11 | 分类于 GuideBook , Android |
AsyncTask 首先从Android3.0开始,系统要求网络访问必须在子线程中进行,否则网络访问将会失败并抛出NetworkOnMainThreadException这个异常,这样做是为了避免主线程由于耗时操作所阻塞从而出现ANR现象。AsyncTask封装了线程池和Handler。AsyncTask有两个线程池:SerialExecutor和THREAD_POOL_EXECUTOR。前者是用于任务的排队,默认是串行的线程池:后者用于真正的执行任务。AsyncTask还有一个Handler,叫InternalHandler,用于将执行环境从线程池切换到主线程。AsyncTask内部就是通过 ...
阅读全文 »

ART和Dalvik区别

发表于 2019-05-11 | 分类于 GuideBook , Android |
ART和Dalvik区别 Art上应用启动快,运行快,但是耗费更多存储空间,安装时间长,总的来说ART的功效就是”空间换时间”。 ART: Ahead of Time Dalvik: Just in Time 什么是Dalvik:Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一,它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik应用设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik经过 ...
阅读全文 »
1…345…12
May

May

Life is fantastic!

120 日志
18 分类
3 标签
GitHub
© 2019 May | Site words total count: 87.1k
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
本站总访问量 次 | 有人看过我的博客啦