2012-11-29 8 views
0

이 코드는 onDestroy() 메서드에서 작성합니다.배경을 닫을 때 서비스를 닫을 수 없습니다.

@Override 
public void onDestroy() 
{ 
MessageService.this.stopSelf(); 
messageThread.isRunning = false; 
System.exit(0); 
super.onDestroy(); 
} 

다른 활동에서 서비스를 닫습니다.

stopService(new Intent(MainOptionActivity.this,MessageService.class)); 

많은 코드를 시도했지만 배경을 닫을 때 서비스를 닫을 수 없습니다. 아무도 내게 약간의 조언을 줄 수 있습니까? 감사.

답변

2

서비스 클래스

public class MyService extends Service { 

@Override 
public IBinder onBind(Intent intent) { 

    return null; 
} 

@Override 
public void onCreate() { 
    Toast.makeText(getApplicationContext(), "MSG onCreate SERVICE", Toast.LENGTH_LONG).show(); 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(getApplicationContext(), "MSG onStartCommand SERVICE", Toast.LENGTH_LONG).show(); 
    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy() { 
    Toast.makeText(getApplicationContext(), "MSG STOP SERVICE", Toast.LENGTH_LONG).show(); 
    super.onDestroy(); 
} 

} 

에 대한 간단한 코드이며, 여기에이 서비스

startService(new Intent(this, MyService.class)); 

    new Timer().schedule(new TimerTask() { 

     @Override 
     public void run() { 
      startService(new Intent(getApplicationContext(), MyService.class)); 
     } 
    }, 5000); 

    new Timer().schedule(new TimerTask() { 

     @Override 
     public void run() { 
      stopService(new Intent(getApplicationContext(), MyService.class)); 
     } 
    }, 10000); 

이 잘 작동하는지 테스트하기위한 코드입니다보십시오. 또한이 코드를 매니페스트에 추가하십시오.

<service android:name=".MyService" /> 
1

Android에서 System.exit(0)을 사용하지 말고 대신 finish (예 : 활동)을 사용합니다.

그러나 실제로는 onDestroy 방법을 중지 할 필요가 없습니다. 실제로 중지되고 파괴 될 것입니다 (그게 onDestroy 방법입니다).

System.exit(0);으로 메서드 실행을 중지하면 시스템이 super.onDestroy();에 도달하지 않으며 서비스가 손상되지 않습니다.

은 여기

@Override 
public void onDestroy() { 
    messageThread.isRunning = false; 
    super.onDestroy(); 
} 
관련 문제