18

我有一项正在下载文件的服务。下载完成后,我想更新我的“已下载文件”列表Activity,但前提是该列表Activity正在运行。Activity如果它还没有运行,我不想启动它。

我希望我可以通过制作Intent带有一些特殊标志的新标志来做到这一点。

任何人都知道我怎么能做到这一点?也许是一个小代码示例?

4

2 回答 2

19

您可以创建新的 BroadcastReceiver 实例并在 Activity 的 onResume() 方法上按照以下方式执行操作:

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED));

之后,重写 myReceiver 的 onReceive() 方法以调用更新所需组件的函数:

@Override 
public void onReceive(Context context, Intent intent) {
...
    updateViewWithData(service.getNewFileData());
...
}

在您的 Activity 的 onPause() 方法上,只需取消注册接收器:

unregisterReceiver(myReceiver);

我希望这会对你有所帮助,请随时询问是否有不清楚的地方。

于 2009-08-24T21:12:21.507 回答
3

执行此操作的好方法是将“已下载文件”活动绑定到服务。绑定服务时,在 onServiceConnected 函数中,注册一个 Binder 回调。然后,只要您有新数据可用,服务就会调用该回调。如果activity没有运行,服务端的回调列表会是空的,所以不会通知你的activity。

有关此方法的示例,请查看 Android SDK 中的 RemoteService.java:

示例\ApiDemos\src\com\example\android\apis\app\

于 2009-08-25T08:33:01.630 回答