1、默认同一个app的所有组件运行在同一个process中,<application>、<activity>、<service>中的process属性可以设置组件所属的process;默认使用<application>中的包名process,每个组件可以设置自己的process值,设置私有或者公共进程名。同一个userID和签名证书的app可共享process; IPC:内部实现RPC,Android将c端方法调用转化为OS底层可理解的数据,传递给远程进程地址空间S端,s端重新组装数据,执行方法,将结果再逆向给c端。 2、进程重要性优先级--用户process按拥有的组件的运行状态来划分重要性: foreground process--用户交互需要的进程:activity在running/assumed状态;bound service的activity在running/assumed状态;startForeground()的service;正在执行onCreate()、onStart()、onDestroy()的service;正在执行onReceive()的BroadcastReceiver。 visible process--用户可见,但没有foreground component的process:visible的activity;bound service的activity在visible状态。 service process--执行了startService()但未销毁的started service。 background process--stopped activity,按LRU队列杀死process。 empty process--没有active组件的process,只是cache来提高下次启动速度。 3、线程 UI/main thread--单线程模式:派发widget、view的交互、绘制事件;组件的初始化;派发系统给个组件的事件; ANR:UI thread如果blocked超过5s,系统会给出ANR对话框。 单线程模式规则: 不要block UI thread:创建worker thread。 UI tookit的访问必须通过UI thread:不需要ui交互的简单调用可用activity.runOnUiThread(Runnable)、view.post(Runnable,long);复杂的交互用Handler(实现handleMessage)、AsyncTask; AsyncTask:分离工作到worker thread、UI thread两部分。简化worker thread、handler的使用,适用于秒级的短操作。不错的总结:http://blog.csdn.net/hitlion2008/article/details/7983449 worker thread:线程池;doInBackground();publishProgress()调用UI thread的onProgressUpdate(); UI thread:onPreExecute(), onPostExecute(), onProgressUpdate() ; 线程安全方法: bound service:同一process的IBinder中方法在调用者thread中执行,从其它process调用IBinder时,onBind()在UI thread中执行,其它方法在IBinder同一process的系统维护的线程池中的thread中执行。 content provider:query()、insert()在其process线程池的thread中执行,需实现thread-safe。 4、权限: 签名证书:区分作者; userId:安装时每个包一个userID,每个userID有不同的文件权限;通过在不同包的<manifest>使用相同的sharedUserId、签名证书来共享userId,设置组件使用相同的process属性在同一个process中运行;getSharedPreferences()、openFileOutput()、openOrCreateDatabase()的数据都被赋予userId作为文件主,MODE_WORLD_READABLE标志可以赋予其它userId的user读写权限。 <uses-permission>:apk包安装时申请权限; app自定义权限<permission>:name属性是唯一标识;label与description属性是显示给用户的描述;protectionLevel属性告诉系统怎么显示给用户; 列出所有权限:adb shell pm list permissions -s 在<activity>、<service>的组件声明中加入android:permission,调用该组件如startActivity()时需要有对应的permission,否则抛出SecurityException;<broadcast receiver>需与broadcast配合permission使用;<content provider>有read、write两种permission。 检查权限:IPC检查权限checkCallingPermission()、 checkPermission()、PackageManager.checkPermission()。 per-URI permission:<content provider>的grantUriPermissions属性设为“true”,可通过 Intent.FLAG_GRANT_READ_URI_PERMISSION在调用时动态赋予单个URI权限。 5、App Widgets:微型应用view,可嵌入host(如Home),由App Widget provider定期更新。