zoukankan      html  css  js  c++  java
  • 进程和线程Processes and Threads

    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定期更新。
  • 相关阅读:
    Lucky Coins Sequence
    A == B ?
    Chinese Rings
    51nod 1051 最大子矩阵和
    51nod 1103 N的倍数
    Codeforces Round #429 (Div. 2)
    51nod 1043 幸运号码(数位dp
    51nod 1266 蚂蚁
    51nod 1090 3个数和为0
    51nod 1082 与7无关的数
  • 原文地址:https://www.cnblogs.com/toven/p/2641127.html
Copyright © 2011-2022 走看看