目前已經寫了一個小app
將Service設定為Foreground以監控手機狀態
上述功能目前可正常運作
但是希望做到如果Process被Kill可以自動重啟的功能
用一般Task Killer刪除Process是會自動重啟
但是如果用手機內建「設定/應用程式」功能去停用Process
程式就真的不會醒來了(淚)
上網爬文有提到可利用uncaughtException來執行重啟程式
程式大概如下列所示
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout2);
intent = getIntent();
intent.setClassName("myPackageName", "className");
m_restartIntent = PendingIntent.getActivity
(getApplicationContext(), 0,
intent, Intent.FLAG_ACTIVITY_NEW_TASK);
}
public void uncaughtException(Thread thread, Throwable ex)
{
Log.e("unKonwException", "uncaught exception is catched!");
AlarmManager amg = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
amg.set(AlarmManager.RTC, System.currentTimeMillis() + 3000,
m_restartIntent);
System.exit(0);
}
疑問一、
當故意測試幾個會有Exception的情形如java.lang.nullpointe exception
uncaughtException()會偵測的到
但是它會直接重啟myPackageName.className 這個Activity
有辦法只重啟Service嗎
疑問二、
當故意以手機內建「設定/應用程式」功能去停用Process
uncaughtException()卻無法catch exception
當然也辦法重啟程式
想請教在這種情境下
uncaughtException()究竟能不能catch exception
疑問三、
除了uncaughtException()外
且暫時不考慮用另一個app來監聽
還有其他方式可以做到被手機內建「設定/應用程式」功能去停用Process後
還能自動重啟service的作法嗎?
請板上高人能指點小弟迷津<(_ _)>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.69.35.10
※ 編輯: SF2SG 來自: 210.69.35.10 (11/05 18:38)
1F:推 gpc:uncaughtException就是抓exception啊... 11/05 19:05
2F:→ gpc:他只能抓因為你沒有寫好程式爆掉的例外 11/05 19:06
3F:→ gpc:程式被系統殺是無解的 11/05 19:06
4F:→ gpc:如果你要防止被殺 你要設:persistent 但那要放到system 11/05 19:07
5F:→ gpc:都停用了 還要重啟 那跟病毒差不多囉 這種行為不合理 11/05 19:08
6F:→ gpc:至於疑問1 你程式寫好一點 不要出錯就好了.要治本 不要治標 11/05 19:09
7F:推 LaPass:寫兩個SERVICE,互相監控對方有沒有執行呢? 11/05 19:21
8F:→ SF2SG:因為有看過其他app可以被停用還能重啟,很好奇如何實作 11/05 19:22
9F:→ SF2SG:重啟功能主要是避免被user停用service 11/05 19:23
10F:→ SF2SG:二個service因為在同一個Package裡還是會被一併停止Orz... 11/05 19:24
11F:推 LaPass:有可能放兩隻嗎? 或是用鬧鐘之類的..... 11/05 19:52
12F:→ dreamcwli:重啟應該是用軟體本身有一些 receiver 去做的? 11/06 00:48
13F:→ dreamcwli:不過都被使用者關掉了還去重啟感覺不太好 11/06 00:49
14F:推 fasthall:可以用receiver達成 不過你這個作法很不合理 11/06 00:52
15F:推 yauhh:何必這樣苦呢,停用就停用啊 11/06 09:05
16F:→ Killercat:IntentService會這樣死嗎?我記得好像不會 11/06 21:12
17F:→ Killercat:除非是IS自己炸掉啦.... 11/06 21:12
18F:→ Killercat:另外其實死掉重生很多種方法,比較普遍的是利用android 11/06 21:13
19F:→ Killercat:手機的一個預設行為:ActivityA產生ActivityB 如果B壞掉 11/06 21:13
20F:→ Killercat:A不會死,會回到A,所以可以在A的onResume檢查B還活否 11/06 21:14
21F:→ Killercat:B死了就在啟動一次,這是一些app的做法 11/06 21:14