Android에서 서비스 중지


79

여기서는 간단한 서비스 프로그램을 시도했습니다. 서비스 시작은 제대로 작동하고 토스트를 생성하지만 서비스 중지는 그렇지 않습니다. 이 간단한 서비스의 코드는 다음과 같습니다.

public class MailService extends Service {
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    public void onCreate(){
        super.onCreate();
        Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
    }
    public void onDestroyed(){
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show();
        super.onDestroy();
    }
}

이 서비스가 호출되는 활동 코드는 다음과 같습니다.

public class ServiceTest extends Activity{
    private Button start,stop;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.service_test);

        start=(Button)findViewById(R.id.btnStart);
        stop=(Button)findViewById(R.id.btnStop);

        start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                startService(new Intent(ServiceTest.this,MailService.class));
            }
        });
        stop.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                stopService(new Intent(ServiceTest.this,MailService.class));
            }
        });
    }
}

onDestroy () 메서드에서 토스트를 생성하는 중지 버튼으로 서비스를 중지하도록 도와주세요. 나는 이미 여기에서 서비스 중지 문제에 관한 많은 게시물을 보았지만 만족스럽지 않아 새로운 질문을 게시했습니다. 만족스러운 답변을 바랍니다.


6
않습니다 stopService(serviceIntent)작동하지?
Chris Cashwell 2011

"또한 서비스가 파기되는 정확한시기는 Android에 따라 다르며 즉각적이지 않을 수도 있습니다." 보낸 사람 : stackoverflow.com/questions/2176375/android-service-wont-stop/…
bigstones 2011

1
@chris : 위에서 구현 한 stopService (serviceIntent) 메서드는 onDestroy ()에서 Toast가 중지 버튼 클릭시 발생하지 않았기 때문에 작동하지 않는다고 생각합니다.
Ravi Bhatt 2011

@bigstone : stopService () 및 onDestroy () 메서드가 올바르게 작동하지만 중지 버튼을 눌렀을 때 즉시 작동하지 않는다는 의미입니까?
Ravi Bhatt 2011

@Ravi : 네. Android는 서비스를 메모리에 보관하기에 충분한 리소스가 있다고 결정할 수 있으므로 다시 필요할 때 사용할 수 있습니다.
bigstones 2011

답변:


49
onDestroyed()

에 대한 잘못된 이름입니다

onDestroy()  

이 질문이나 코드에서도 실수를 했습니까?


네 나중에 코드를 처음부터 만들었고 잘 작동했습니다. 다른 사람과 내가 알지 못했던 이전 코드의 문제 일 수 있습니다. 어쨌든 감사합니다 :) 다른 사람에게도 도움이됩니다.
Ravi Bhatt

2
@RaviBhatt 그래서 서비스 중단에 성공 했습니까? 그렇다면 어떻게하는지 공유 할 수 있습니까?
SURAJ


3
@suraj 필요한 것보다 내 코드를 참조했다면 Activity에서 하나의 인 텐트를 만들고 intent = new Intent(ServiceTest.this,MailService.class) startService (intent) 및 stopService (intent)와 같은 서비스를 시작하고 중지하는 데 동일한 인 텐트를 사용하십시오.
Ravi Bhatt

11
그렇기 때문에 항상 @Override주석 을 사용해야합니다 .
Pavel

16

이 코드는 나를 위해 작동합니다.이 링크를 확인하십시오
. 활동에서 서비스를 중지하고 시작할 때 내 코드입니다.

case R.id.buttonStart:
  Log.d(TAG, "onClick: starting srvice");
  startService(new Intent(this, MyService.class));
  break;
case R.id.buttonStop:
  Log.d(TAG, "onClick: stopping srvice");
  stopService(new Intent(this, MyService.class));
  break;
}
}
 }

그리고 서비스 등급 :

  @Override
public void onCreate() {
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onCreate");

    player = MediaPlayer.create(this, R.raw.braincandy);
    player.setLooping(false); // Set looping
}

@Override
public void onDestroy() {
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onDestroy");
    player.stop();
}

즐거운 코딩!


서비스 내부에서 예외를 처리하는 방법은 무엇입니까? 그때 onDestory ()가 호출되는지 의심합니다.
Srihari Karanth

14

서비스중지 하려면 다음 메소드를 사용해야합니다 stopService().

  Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class);
  //startService(myService);
  stopService(myService);

그러면 onDestroy()서비스 의 메서드 가 호출됩니다.

  @Override
    public void onDestroy() {

        Log.i(TAG, "onCreate() , service stopped...");
    }

다음은 서비스를 중지하는 방법을 포함하는 완전한 예 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.