How to use an intent to update an activity?

2020-02-20 02:54发布

问题:

I have a service that is downloading a file. When the download is done, I would like to update my "Downloaded files" list in my Activity, but only if the Activity is running. I do not want the Activity to start if it's not already running.

I was hoping I could do this by making a new Intent with some special flag.

Anyone have any idea how I can achieve this? A tiny code example maybe?

回答1:

You can create new BroadcastReceiver instance and do something along these lines on your Activity's onResume() method:

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

After that, override myReceiver's onReceive() method to call a function that updates the component you want:

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

On your Activity's onPause() method, just unregister the receiver:

unregisterReceiver(myReceiver);

I hope that this would help you, feel free to ask if there is something unclear.



回答2:

The good way to do this is to bind your "Downloaded files" activity to the service. When you bind the service, in the function onServiceConnected, register a Binder callback. Then, whenever you have new data available, service just calls that callback. If the activity is not running, the callback list at the service side will be empty, so it will not inform your activity.

For an example of this approach, take a look at RemoteService.java in Android SDK:

samples\ApiDemos\src\com\example\android\apis\app\