2013-07-02 2 views
0

서비스를 시작하기 위해 AlarmManager 객체를 설정했습니다.
AlarmManager에 의해 시작된 서비스가 작업에서 중지되지 않았습니다.

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); //context = getApplicationContext(); 
Intent alarmServiceIntent = new Intent(context, AlarmHandlingService.class); 
alarmServiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
alarmServiceIntent.putExtra("alarmId", _id); //_id is a "long" value 
PendingIntent pi = PendingIntent.getService(context, (int)_id, alarmServiceIntent, 0); 
am.set(AlarmManager.RTC_WAKEUP, time, pi); 

onStartCommand(..., ..., ...)AlarmHandlingService의 작품은 일해야하고있을 때 작동한다. 새로운 활동이 열립니다 (SomeActivity) 내가 stopService(...)를 호출 할 때 다음, 서비스가 중지되지

public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    long alarmId = intent.getLongExtra("alarmId", -1); 
    Intent someActivityIntent = new Intent(this, SomeActivity.class); 
    someActivityIntent.putExtra("alarmId", alarmId); 
    someActivityIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(someActivityIntent); 
    return START_NOT_STICKY; 
} 

:하지만이 선언은

stopService(new Intent(context, AlarmHandlingService.class)); //context = getApplicationContext(); 

어떤 문제가되지 않습니다 매니페스트 내 서비스 클래스 :
<service android:name="***myPackageName***.AlarmHandlingService"></service>

나는 디버깅 시도하고 눈치 해당 android.content.ContextWrapper 제공자 라이선스 계약의 registerReceiver (BroadcastReceiver receiver, IntentFilter filter) 기능 내가 stopService라고 부를 때 호출됩니다.

+0

당신의 onDestroy()에는 무엇이 있습니까? – NetStarter

+1

나는 onDestroy와 아무 상관이 없습니다. stopService 이후에 호출되지 않습니까? 그리고 내 stopService가 전혀 호출되지 않았습니다 ... @ Override public boolean stopService (의도 이름) { Log.e (TAG, "Service is stopped"); return super.stopService (name); } – smb

+1

Aaaaaa !!!! 매우 고맙습니다. NetStarter :) stopService에서 onDestroy로 코드를 옮겼습니다. 이제 작동합니다. :) – smb

답변

0

stopService를 호출 할 때 아무런 조치도 취하지 않았습니다.

stopService를 호출하면 실제로 stopService() 함수가 호출됩니다 (응용 프로그램에서 수행 중임).

onDestroy 메서드를 사용해야합니다. 더 이상 사용하고, 삭제되는 서비스을 알리기 위해 시스템에서 호출 API 레벨 1

에서

public void onDestroy() 

추가. 서비스는이 시점에서 보유하고있는 모든 리소스 (스레드, 등록 된 리시버 등)를 정리해야합니다. 돌아 왔을 때,이 Service 객체에 대한 호출은 더 이상 존재하지 않을 것이고 그것은 실제로 죽습니다. (이 메소드를 직접 호출하지 마십시오.).

다른 문제는 알람 관리자를 중지하기 위해 아무 것도 호출하지 않는다는 것입니다.

AlarmManager에 대해 cancel 메서드를 호출해야합니다.

0

새로운 활동을 시도해보십시오.

stopService(new Intent(this, AlarmHandlingService.class)); 
+0

OP는'stopService (new Intent (context, AlarmHandlingService.클래스)); – NetStarter

관련 문제