暂停活动是否还会收到来自服务的回调?

时间:2017-09-18 11:52:11

标签: android android-service android-lifecycle

所以这就是我想要了解的内容。

我有这样的服务

public MyService extends Service {

    public List<MyListener> listenersList = new ArrayList<>();
    public void addListeners(MyListeners mylistener) {
          listenersList.add(myListener);
      }
    public void eventAOccured(){
          for ( MyListner mylistener : listeners ) {
               mylistener.eventAOccured();
           }
       }

    public void eventBOccured(){
          for ( MyListner mylistener : listeners ) {
               mylistener.eventBOccured();
           }
       }

}

这是我的MyListener接口活动

 public Interface MyListener {
     public eventAOccured();
     public eventBOccured();
}

现在我们有三个活动

public Activity1 extends AppCompatActivity implements MyListener{

    public static int myVariable = 1;
    //starts service. For sake of brevity I am skipping this part.
    MyService.add(this);
    //on click of a button 
    startActivity( new Intent (Activity1.this, Activity2.class);
    //Now I know this will put Activity1 in paused state

    @Override
    public void eventAOccured() {
          //Call activity 3
       }

    @Override
    public void eventBOccured() {
          myVariable = 3;
      }

}

这是通过单击活动1中的按钮调用的第二个活动。启动Activity2后,假设发生了eventB。现在,如果我从Activity1访问myVariable,它将是1还是3。

经过一段时间后我们说,eventA已经发生了。现在Activity3将会推出吗?

我知道暂停的活动意味着用户不再可见,但与服务的通信是否会继续?

2 个答案:

答案 0 :(得分:2)

是的,暂停的活动仍然会收到事件,因为它在系统的后堆栈中并且不会被破坏。

答案 1 :(得分:0)

重写onStartCommand(Intent intent,int flags,int startId)和returen STRAT_STICKY。这将重启服务。 您可以查看以下示例。

公共类测试扩展服务{

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.e("Test Service ", "onStartCommand");

    return START_STICKY; //It will restart Service in onPause/onDestroy
}


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

    //Do your operation
}

}