我在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,但这并没有发回任何类型的“我失败了”。信号,我不需要一个成功的'信号。
所以关于如何使意图始终有效的任何想法。我的任何其他应用中都没有遇到此问题。
我正式难倒。它很少发生,我甚至无法测试它。