来自服务的Android更新活动

时间:2014-07-01 11:11:10

标签: android multithreading service notifications json-rpc

我迷失在Android中的所有通知和服务工作流程中。我的场景是这样的:

我有一个Android应用程序,通过使用JSON-RPC的Web服务与MySQL数据库进行通信。从服务检索的数据将显示在应用程序中。

数据会随着时间的推移而更新,因此应用程序需要监听此更改,如果发生更改,则显示通知并更新应用程序中显示的数据。

要听取更改,我需要运行“无限”(直到应用程序被销毁或者可能直到应用程序销毁它)线程不时会在Web服务上调用一个方法来返回更改自上次检查。

更新:好的,我一直在尝试使用ServiceIntentService,但它们不符合我的需求:主线程中执行Service,所以如果我执行无限循环我的应用程序将冻结,IntentService拥有它自己的工作线程,但没有与应用程序通信,我需要它,或者至少我需要一种方法来知道应用程序是否在前台(在这种情况下)通知不会弹出,但数据将被传递和更新)或在后台(在这种情况下,通知会弹出,点击它会将用户引导到具有更新数据的应用程序)

2 个答案:

答案 0 :(得分:0)

#1 您可以从服务中发送广播消息,并在“活动”中定义广播接收器以接收此广播。

发送广播 - 来自服务

Intent i = new Intent("ALERT_CHANGE");
i.putExtra("DATA","News");
sendBroadcast(i);

接收广播活动

registerReceiver(uiUpdated, new IntentFilter("ALERT_CHANGE"));


private BroadcastReceiver uiUpdated= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) 
{
String DATA = i.getStringExtra("Data");
txt.settext(DATA);
}
};

答案 1 :(得分:0)

好的,经过大量测试后,感谢此处提供的信息,我终于找到了解决问题的方法,所以我将在这里分享:

IntentService我有公共静态 AtomicBoolean来控制循环结束并能够停止服务。

然后确定Activity是否在前景中我是否使用此处建议的方法https://stackoverflow.com/a/5504711/3107765

不同之处在于我在那里使用静态修改器,所以我可以从服务中检查它。

如果活动在前台,我发送一个广播,就像Eu在这里建议的那样。博士否则我使用通知,一旦点击将让用户参加活动。