我有一个我想要处理的后台任务。事情是,当任务完成时,我想调用一个新的Activity来向用户显示结果,只有当我的主Activity显示时,否则我只想发送一个通知,以便用户可以看到该动作完成了,并且能够随时打开它。
我正在考虑使用服务来处理后台任务的启动和终止,并在完成后广播一条消息,但在这种情况下,我无法知道是否显示了活动或者是否未处理广播我应该发送通知。
所以这是我的问题,因为我在后台任务和服务方面的知识和经验有限,所以我决定寻求帮助。
提前感谢您阅读我的案例,希望得到一些帮助!
答案 0 :(得分:24)
这是一篇很好的文章,介绍了如何实现您想要的内容:Activity or Notification via Ordered Broadcast。
主要想法是使用有序广播。你应该创建一个没有任何活动的BroadcastReceiver
。为此,您应该在AndroidManifest.xml
文件中声明它。此接收器将显示Notification
。您还应该在主要活动中注册具有更高优先级的另一个BroadcastReceiver
,这将在屏幕上显示某些内容。然后你只需要发送有序广播。
答案 1 :(得分:4)
试试这样。
private static boolean isInForeground;
onResume(){
isInForground = true;
}
onPause(){
isInForground = false;
}
如果isInForground为true
,则Activity为Forground(显示),否则不显示。
如果您想从任何地方了解,请在MainActivity中添加以下内容。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
onResume(){
pref = PreferenceManager.getDefaultSharedPreferences(this);
prefEditor = prefs.edit();
prefEditor.putBoolean("isInForeground",true);
prefEditor.commit();
}
onPause(){
pref = PreferenceManager.getDefaultSharedPreferences(this);
prefEditor = prefs.edit();
prefEditor.putBoolean("isInForeground", false);
prefEditor.commit();
}
然后从您的服务。
pref = PreferenceManager.getDefaultSharedPreferences(this);
if(pref.getBoolean("isInForeground", false)){
//MainActivity is in forground
}
else{
//not in forground
}
答案 2 :(得分:1)
听起来你想在服务的线程中实现任务。您可以在Activity中使用持久性静态布尔值来指示是否显示活动。用户可以在onResume()
中看到活动,并且只要调用onPause()
,该活动就不可见。在onResume()
中将布尔值设置为true,在onPause()
中将布尔值设置为false。
答案 3 :(得分:0)
你可以使用SharedPreferences; 当活动在onStart()或onStop()时更新活动的首选项,并在您的服务中验证它。
希望我能提供帮助。