Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 安卓多線程間通信和多進程之間通信有什麼不同?分別怎麼實現?,安卓多線程

安卓多線程間通信和多進程之間通信有什麼不同?分別怎麼實現?,安卓多線程

編輯:關於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來結束
  1. Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);
  2. forceStopPackage.setAccessible(true);
  3. forceStopPackage.invoke(am, yourpkgname);
配置文件中需要添加定義: android:sharedUserId="android.uid.system"     另外需要再在配置文件添加權限: <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>   

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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved