0

我有1活动1服务服务将在活动进入后台时启动,并在活动进入前台时停止。当服务停止时,我想通过意图将对象从中发送到活动。这里是我的代码无法使用BroadcastReader与LocalBroadcastManager

MyActivity.java

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(ACTION_WITH_RLM)) {     
     //I will get the object received by service here 
     } 
    } 
}; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_record_lesson_ins); 

    localBroadcastManager = LocalBroadcastManager.getInstance(this); 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(ACTION_WITH_RLM); 
    localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (intent != null) { 
     stopService(intent); 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (intent != null) { 
     startService(intent); 
    } 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    localBroadcastManager.unregisterReceiver(broadcastReceiver); 
} 

MyService.java

private RecordLessonModel recordLessonModel; 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    //I code sth for handle recordLessonModel object 
    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Intent intent = new Intent(MyActivity.ACTION_WITH_RLM); 
    intent.putExtra(MyActivity.RECORD_MODEL_NAME, Parcels.wrap(recordLessonModel)); 
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 

这里的问题是我在broadcastReceiverMyActivity不能从服务时收到意图我的a活动来到前台。我不知道为什么。

感谢。

+0

是你的'onReceive()'被调用吗? – Wizard

+0

尝试从任何其他方法发送广播,而不是'onDestroy':http://stackoverflow.com/a/7237522/1723695 – g4s8

+0

@Wizard:不,我的onReceive()还没有被调用 –

回答

1

你应该考虑取消注册您的广播接收器为onDestory(),而不是onStop()

因为你brodcastReceiver越来越未注册活动时变为背景

欲了解更多请看HERE

+0

请提供一些细节以及您的答案,因此它看起来不像评论,谢谢 –

+0

非常感谢。解决了! –

+0

提供了解释。 – Wizard