在未捕获异常调用上启动活动

4

当未捕获异常出现时,我想从我的UncaughtExceptionHandler启动一个新的活动。这是否可行?

我认为当前的活动在其“错误”状态下无法启动新的子活动,因为我总是得到这些错误:

07-14 14:34:06.075: INFO/ActivityManager(74): Starting activity: Intent { flg=0x10000000 cmp=de.rwth/system.ErrorHandler (has extras) }
07-14 14:34:06.615: WARN/ActivityManager(74): Activity pause timeout for HistoryRecord{4338f8d8 de.rwth/.main}
07-14 14:34:16.115: WARN/ActivityManager(74): Launch timeout has expired, giving up wake lock!
07-14 14:34:16.628: WARN/ActivityManager(74): Activity idle timeout for HistoryRecord{433a89d8 de.rwth/system.ErrorHandler}

我尝试从新线程启动子活动,因为我认为当前线程可能处于不允许启动新活动的状态,但这也没有奏效。

那么有人知道如何解决这个问题吗? 我该如何防止当前活动在错误状态下阻塞一切?是否有办法将异常设置为已处理?


从“ExceptionHandler”启动应用程序是错误的。 - Macarse
如果我们只想要让用户通过电子邮件来呈现异常输出,应该怎么做呢? - Pentium10
我想显示一个新的活动(或任何其他我可以设置布局的东西),并带有错误日志,那么我该怎么做呢?默认的错误处理程序也会显示错误消息,因此一定是可能的。也许问题在于新活动是当前(损坏的)活动的子活动,并且由于这个原因不会显示? - Simon
1个回答

5
你需要做的是在清单文件中指定异常显示Activity,并将android:taskAffinityandroid:process设置为与主进程不同的值。然后,你需要指定一个意图过滤器,并使用它来启动活动并传递数据。
默认情况下,taskAffinity从主<application>标签继承,并且与在<manifest>标签中设置的页面名称相同。你可能想要像这样设置android:taskAffinity="org.example.package.TASK.ExceptionDisplay" 默认情况下,同一<application>标签中的所有内容都在同一进程中运行。你可以使用android:process属性进行更改,你可能想要像这样设置android:process=":exception_process"
有关更多详细信息,请查看此文档

我需要设置android:taskAffinity和android:process吗?我理解intent filter的部分,但是我不知道这两个参数的作用。我的intent filter适用于调用intent,并且如下所示:<intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:mimeType="activity/errorReport" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> - Simon
这真的太棒了,似乎现在它可以工作了:)非常感谢。同时我有另一个关于远程服务的问题(http://stackoverflow.com/questions/3269176/activity-crashes-when-remote-service-crashes)。看起来你很了解android的这一部分,也许你也知道这个问题的答案;)服务没有亲和属性,我不确定如何将其与调用活动分离开来。 - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接