編輯:關於android開發
當一個程序第一次啟動的時候,Android會啟動一個LINUX進程和一個主線程。默認的情況下,所有該程序的組件都將在該進程和線程中運行。 同時,Android會為每個應用程序分配一個單獨的LINUX用戶。Android會盡量保留一個正在運行進程,只在內存資源出現不足時,Android會嘗試停止一些進程從而釋放足夠的資源給其他新的進程使用, 也能保證用戶正在訪問的當前進程有足夠的資源去及時地響應用戶的事件。線程是進程的有機組成部分,是CPU調度的基礎。一般情況下,都有主線程和其他線程之分,只有主線程才可以刷新UI。應用程序啟動後,將創建ActivityThread 主線程。
不同包名的組件可以一定的方式運行在同一個進程中。
一個Activity啟動後,至少會有3個線程。一個主線程和2個binder線程。
1.安卓線程間通信的方式有以下幾種1)共享變量(內存)
2)管道
3)handle機制
runOnUiThread(Runnable)
view.post(Runnable)
android 進程內的消息驅動機制---Handler,MessageQueue,Runnable,Looper
Looper和Message的處理機制:首先在主線程中創建了一個handler對象,目的是為了處理從子線程發送過來的消息,然後當子線程有發送消息的需求時會使用Message對象,消息首先會被存儲在Message queue消息隊列中,主線程還有一個Looper消息輪詢器,會循環遍歷消息隊列中的消息,當發現消息的時候會發送消息給handler處理(更新ui等操作),handler調用handleMessage處理完後將Message置為null以便回收.
2進程間的通信
進程間的通信:
bind機制(IPC->AIDL)
linux級共享內存
boradcast
Activity之間可以通過intent來傳遞數據
3.安卓結束進程幾種方式
1)使用ActivityManager中的restartPackage(String packname)方法,這裡清單文件裡面要配置權限
2)android.os.process.killProcess(int pid)只能終止本程序的進程
3)System.exit()
4)在android2.2版本之後則不能再使用restartPackage()方法,而應該使用killBackgroundProcesses()方法,同時應該配置權限
5)利用反射調用forceStopPackage來結束Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(am, yourpkgname);
6)使用Linux指令kill -9
7)退出到主屏幕
public boolean onKeyDown(int keyCode, KeyEvent event) { // event.getRepeatCount():按下返回鍵,同時沒有重復 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { Intent home = new Intent(Intent.ACTION_MAIN); home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); home.addCategory(Intent.CATEGORY_HOME); startActivity(home); } return super.onKeyDown(keyCode, event); }
Android之QQ登錄界面,android登錄界面 首先過程中碰到的幾個問題: 1、對 EditText 進行自定義背景 2、運行時自動 EditText 自動獲得焦點
UI組件之ImageView及其子類(一)ImageView顯示圖片 ImageView家族的繼承關系如圖: ImageView繼承自View組件,它的主要功能室顯示圖
android Gui系統之SurfaceFlinger(3),androidgui系統7.SurfaceFlinger SurfaceFlinger在前面的篇幅了,多有
Android多媒體--MediaCodec 中文API文檔,mediacodecapi*由於工作需要,需要利用MediaCodec實現Playback及Transcod
Android——Listview不用notifydatasetchan