2017-09-18 4 views
1

그래서 여기에 내가 이해하려고하는 것이 있습니다.일시 중지 된 활동이 계속 서비스에서 콜백을 수신합니까?

나는이 여기

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(); 
      } 
     } 

} 

와 같은 서비스는이 두 번째 활동 활동

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; 
     } 

} 

이 내에 myListener 인터페이스 인 활동 1의 버튼을 클릭하여 호출됩니다. 활동 2가 시작된 후, 이브 NTB가 발생합니다. 이제 Activity1에서 myVariable에 액세스하면 1 또는 3이됩니다.

얼마 지나지 않아 eventA가 발생했습니다. 이제 Activity3이 시작됩니까?

나는 일시 중지 된 활동이 더 이상 사용자에게 표시되지 않는다는 것을 알고 있지만 서비스와의 통신은 계속됩니까?

+2

무엇 단순히 시도에서 당신을 중지 연장? –

+0

시도했지만, eventA와 eventB를 시뮬레이트 할 수 없기 때문에 Activity1의 재정의 메소드가 호출되지 않습니다. –

+2

시뮬레이션 할 수있는 콜백을 시도하십시오. 예를 들어 B에서 A의 무언가를 호출하고 작동하는지 확인 –

답변

1

예, 일시 중지 된 활동은 시스템의 백 스택에서 그대로 이벤트를 수신하며 파기되지 않습니다.

0

(의도 의도, int 플래그, int startId) onStartCommand를 재정의하고 STRAT_STICKY를 returen하십시오. 그러면 서비스가 다시 시작됩니다. 다음 예제를 확인할 수 있습니다.

공용 클래스 테스트 서비스 {

@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 
} 

}

관련 문제