目前已经写了一个小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