後臺啓動Activity

問題:定時器界面A    定時提醒界面B

A正在運行,按HOME鍵被切換到後臺,這時時間到了,應該啓動B界面,這時在桌面再次點擊定時器圖標,則B界面再也不出現。

從log中,發現啓動B界面的請求被忽略了

06-22 17:31:21.897 I/ActivityManager(  664): START u0 {flg=0x10000000 cmp=com.mobvoi.ticwear.timer/.ui.TimerUpActivity (has extras)} from uid 10020 on display 0
06-22 17:31:21.897 W/ActivityManager(  664): Activity start request from 10020 stopped


Android代碼:frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java    startActivityLocked函數


解釋:

當通過 home 鍵將當前 activity 置於後臺時,任何在後臺startActivity 的操作都將會延遲 5 秒,除非該應用獲取了 "android.permission.STOP_APP_SWITCHES" 權限。

關於延遲 5 秒的操作在 com.android.server.am.ActivityManagerService 中的 stopAppSwitches() 方法中,系統級的應用當獲取了 "android.permission.STOP_APP_SWITCHES" 後將不會調用到這個方法來延遲通過後臺啓動 activity 的操作,事實上 android 原生的 Phone 應用就是這樣的情況,它是一個獲取了"android.permission.STOP_APP_SWITCHES" 權限的系統級應用,當有來電時,一個從後臺啓動的 activity 將突然出現在用戶的面前,警醒用戶有新的來電,這樣的設計是合理的。 

所以,當你需要開發類似 Phone 這樣的應用時,需要做如下工作:
  1. root 你的手機;
  2. 在 AndroidManifest.xml 中添加 "android.permission.STOP_APP_SWITCHES"  用戶權限;
  3. 將你開發的應用程序 push 到手機的 /system/app 目錄中。
http://blog.csdn.net/ixiaobu/article/details/18226917


我又做了個實驗,

1)  在MainActivity onStop的時候,啓動2s的定時器,啓動Activity2.

結論:從onStop到Activity2展現,需要5s

06-23 10:22:35.298 D/MainActivity( 9769): onStop
06-23 10:22:37.308 E/MainActivity( 9769): thread time up
06-23 10:22:37.308 I/ActivityManager( 1073): START u0 {cmp=com.example.myapplication/.Activity2} from uid 10141 on display 0
06-23 10:22:37.308 W/ActivityManager( 1073): resultRecord is null: true
06-23 10:22:37.308 W/ActivityManager( 1073): Activity start request from 10141 stopped
06-23 10:22:39.888 D/Activity2( 9769): onCreate

2) 在MainActivity onStop的時候,啓動7s的定時器,啓動Activity2.

結論:從onStop到Activity2展現,需要7s

06-23 10:31:35.018 D/MainActivity(21082): onStop
06-23 10:31:42.048 E/MainActivity(21082): thread time up
06-23 10:31:42.048 I/ActivityManager( 1073): START u0 {cmp=com.example.myapplication/.Activity2} from uid 10141 on display 0
06-23 10:31:42.208 D/Activity2(21082): onCreate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章