• 进程和线程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定期更新。
  • 相关阅读:
    C指针典例
    20150310 块设备驱动程序
    python连接redis
    利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
    将一个正整数分解质因数。例如输入90,打印出90=2*3*3*5
    python 中输入一个字符串,判断这个字符串中有多少个字符、数字、空格、特殊字符
    学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用利用条件运算符的嵌套来完成此题:C表示。
    nginx在基于域名访问的时候是下载的界面
    mysql数据库二进制初始化出现:170425 17:47:04 [ERROR] /application/mysql//bin/mysqld: unknown option '--skip-locking' 170425 17:47:04 [ERROR] Aborting 解决办法
    赛马问题
  • 原文地址:https://www.cnblogs.com/toven/p/2641127.html
Copyright © 2020-2023  润新知