1. 程式人生 > >安卓多執行緒間通訊和多程序之間通訊有什麼不同?分別怎麼實現?

安卓多執行緒間通訊和多程序之間通訊有什麼不同?分別怎麼實現?

**當一個程式第一次啟動的時候,Android會去動一個Linux進行和一個主執行緒,預設情況下,所有改程式元件都將在該程序和執行緒中 執行,同時Android會為每個應用程式分配一個單獨的Linux使用者,Android會盡量保留一個正在執行的程序,只在記憶體資源出現不足時,Android會嘗試停止一些程序從而釋放足夠的資源給其它新的程序使用者,也能保證使用者正在訪問的當前程序有足夠的資源去及時的響應使用者的事件,執行緒是程序的有機組成部分,是CPU排程的基礎,一般情況下,都有主執行緒和其它執行緒之分,只有主執行緒才可以重新整理UI,應用程式啟動後,將建立activityThread主執行緒**
不同包名的元件可以一定的方式執行在同一個程序中。

一個Activity啟動後,至少會有3個執行緒。一個主執行緒和2個binder執行緒。
1.安卓執行緒間通訊的方式有以下幾種
1)共享變數(記憶體)
2)管道
3)handler機制
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);
配置檔案中需要新增定義:
android:sharedUserId=“android.uid.system”
  另外需要再在配置檔案新增許可權:

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);   
    }