我正在尝试将我的活动实例传递给意向服务。原因是意图服务进行了大量后台服务器通信,如果出现网络错误或服务器返回错误,我想显示弹出消息。
当我创建服务时,我使用此
Intent service = new Intent(this, SyncService.class);
Bundle b2 = new Bundle();
b2.putParcelable(StringsConfig.OBJECT_DELIVERABLES, objects);
service.putExtras(b2);
startService(service);
有没有办法将Activity的实例传递给它。我在SyncService类中也有一个接受Activity的方法,但我不知道如何创建同步服务类的实例,通过该方法传递活动,然后启动同步服务。
感谢任何帮助。
答案 0 :(得分:1)
将Activity实例传递给Intent Service并不是一个好主意。如果长时间运行的后台服务需要显示对话框消息,那么最好将其建模为Intent。
只是做:
Intent dialogIntent = new Intent(getApplicationContext(), YourDialogActivity.class);
dialogIntent.putStringExtra(Constants.TITLE, "Your Dialog Title");
dialogIntent.putIntExtra(Constants.MESSAGE, R.string.yourErrorMessageId);
startActivity(dialogIntent);
这样,服务合同就更清晰了。
答案 1 :(得分:1)
IntentService与活动进行通信的推荐方法是通过BroadcastReceiver。看一下这个例子:
在您希望IntentService与之通信的活动中,创建一个侦听特定意图操作(String)的BroadcastReceiver。这里我的示例名为batchProcessReceiver,并侦听BATCH_PROCESS_RECEIVER操作。 BATCH_PROCESS_RECEIVER可以是Activity中的公共静态常量。
private BroadcastReceiver batchProcessReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BATCH_PROCESS_RECEIVER)) {
// do what you need to do here
}
}
};
在您的活动onResume:
registerReceiver(batchProcessReceiver, new IntentFilter(BATCH_PROCESS_RECEIVER));
的onPause:
unregisterReceiver(batchProcessReceiver);
然后在你的IntentService中,你可以做到
sendBroadcast(new Intent(MyActivity.BATCH_PROCESS_RECEIVER));
触发您要在活动中执行的操作。