从子类Application类调用时,带有FLAG_ACTIVITY_NEW_TASK的startActivity()并不总是有效

时间:2014-09-25 10:16:15

标签: android-intent android-fragments android-library android

我在Application的子类中有一个方法,它触发了一个启动活动的意图。我发送带有意图的字符串,以便新发布的活动知道要向用户显示哪个片段。

有很多原因可以解释为什么我从Application子类开始活动,而100次中有99次它完美地运行。但每隔一段时间它就不会起作用。一切都停止了。

public static void showFirstFragment(){
        Intent intent = new Intent(getAppContext(), HostActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("displayFragment", "firstFragment");
        getAppContext().startActivity(intent);

        methodThatDoesSomethingElse();
}

Application的子类属于我在Android上为Unity游戏提供的库项目,因此方法showFirstFragment()实际上是从游戏代码本身调用的。

正如我所说,100次中有99次完美无缺。没有任何问题。但每隔一段时间,当调用该方法时,系统就不会启动意图。

在花了一整天试图捕获它的日志后,我可以保证传递给intent的上下文不为null,并且每次都会执行methodThatDoesSomethingElse()。此外,methodThatDoesSomethingElse()只是在打开的套接字上发送一小部分数据。它没有做任何可能干扰启动意图的事情。

这是我能够从其中一个刚停止死亡的时间捕获的日志:

09-25 00:20:31.202: I/ActivityManager(750): START u0 {flg=0x10000000 cmp=com.GamePackage.GameName/com.LibraryPackage.package.HostActivity (has extras)} from pid 19318
09-25 00:20:31.232: D/myLogTag(19318): A log from inside methodThatDoesSomethingElse()

当everthing正常工作时,一旦HostActivity启动,所有工作当然会有更多日志和标签。我甚至在HostActivity的onCreate和onResume中都有标签,这些标签在一切都停止时都不会受到影响。它就在那里停下来。

我觉得我遇到了一个很深的Android系统错误,我不知道该怎么做。我是否可以采用某种重试策略来启动意图?我考虑在共享Pref中添加一个bool,当HostActivity启动时切换,然后在Application子类中返回一个定时器内的bool,这样如果bool在2秒后没有改变,那么重新启动intent。但是男人,那是一些hacky狗屎。

我还考虑过使用startActivityForResult,但这并没有发回任何类型的“我失败了”。信号,我不需要一个成功的'信号。

所以关于如何使意图始终有效的任何想法。我的任何其他应用中都没有遇到此问题。

我正式难倒。它很少发生,我甚至无法测试它。

0 个答案:

没有答案