我在自己的应用程序中重用了一项服务(它既是“绑定”又是“启动”服务),因为它进行了很多我感兴趣的有用数据采集。一切正常,但我注意到一个问题。这段代码抛出异常:
Intent dialogIntent = new Intent();
dialogIntent.setClassName(service.getBaseContext(), "com.mycompany.receiver.ui.DialogActivity"); // names changed to protect the innocent
dialogIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
dialogIntent.putExtra("message", message);
service.getApplicationContext().startActivity(dialogIntent);
该异常警告“未知活动”和“您检查过清单吗”。现在,这不是因为我没有将活动放入清单中造成的。事实上,这里确实应该抛出异常,因为我的应用程序没有此活动!这是为原始应用程序编写的活动。我一开始没有注意到它,因为只有当收集的数据超出一定范围时才会触发此代码。
我可以更改服务代码,但服务和原始应用程序必须继续像以前一样工作。只是在我的应用程序中,我对弹出此特定消息的活动不是特别感兴趣(这对我来说并不那么重要)。
我确实考虑过这一点,我可以在所有事情上扔一个 try/catch 块。但这似乎有点老套。如果原始应用程序/服务对中出现其他问题,我想知道。我提出了以下想法,我需要帮助来为我指明正确的方向。
- 有没有办法让服务知道当前正在运行哪些应用程序?
- 或者也许目前在前台?
- 或者当前绑定到该服务怎么样?
我对 1-3 感兴趣(对于一般知识和解决这个问题),但 2 可能是最有用的。毕竟,可能有多个应用程序绑定到该服务,并且我不确定是否因为这条消息而将原始应用程序带到前台而不是我自己的应用程序。
最后....
忘记我说过的一切,然后
4.你会如何解决这个问题?
我在代码的其他地方也有同样非常相似的问题:
Intent toLaunch = new Intent();
toLaunch.setClassName(context, "com.mycompany.receiver.ui.BankingActivity");
toLaunch.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intentBack = PendingIntent.getActivity(context, 0, toLaunch, PendingIntent.FLAG_CANCEL_CURRENT);
notify.setLatestEventInfo(context, title, message, intentBack);
notifier.notify(NOTIFY_1, notify);
这个不会抛出异常;它会发出一个通知,当我点击它时,原始应用程序就会启动。这实际上可能没问题,但同样,最好不要这样做(或者可能是一种妥协 - 让通知程序通知应用程序是否至少已绑定,但不一定在前台)。想法?
非常感谢,
戴夫