2013-08-31 130 views
0

這裏是我的代碼啓動服務:無法停止服務?

我開始我的服務onCreate()我的活動。

Intent svc=new Intent(BeapSoundActivity.this, BackgroundService.class); 
       pendingIntent = PendingIntent.getService(BeapSoundActivity.this, 0, svc, 0); 

       AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 

       Calendar calendar = Calendar.getInstance(); 
       calendar.setTimeInMillis(System.currentTimeMillis()); 
       calendar.add(Calendar.SECOND, 2); 
       alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10*1000, pendingIntent); 

我不能能夠通過調用

stopService停止服務();

這裏是我的服務類:

public class BackgroundService extends Service{ 

// private static final String TAG = null; 
// MediaPlayer player; 
    MediaPlayer mMediaPlayer; 
    String strResponse; 
    int i=0; 

    static { 

//   StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

      StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build()); 
     } 
    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mMediaPlayer = new MediaPlayer(); 
     Log.e("Oncreate","oncreate"); 


    } 
    public int onStartCommand(Intent intent, int flags, int startId) { 
//  player.start(); 
     Log.e("Onstartcommand","onstartcommand"); 

      pendingCount(); 

     return 1; 
    } 

    public void onStart(Intent intent, int startId) { 
     // TO DO 
//  super.onStart(intent,startId); 



     Log.e("Onstart","onstart"); 
//  pendingCount(); 
    } 
    public IBinder onUnBind(Intent arg0) { 
     // TO DO Auto-generated method 
     return null; 
    } 

    public void onStop() { 

    this.stopSelf(); 


    } 
    public void onPause() { 

    } 
    @Override 
    public void onDestroy() { 

     super.onDestroy(); 

      this.stopSelf(); 

//  player.stop(); 
//  player.release(); 
    } 

    @Override 
    public void onLowMemory() { 

    } 


} 

    public void pendingCount(){ 

      my operations during the service 

       } 


    } 


} 

我也試圖與stopSelf()在我的onDestroy(),但它也didnt爲我工作。

請問我該如何解決這個問題?

+0

你需要靜態塊。 –

+0

它只是有些時候我無法使用我的web服務,我不認爲這是問題,stopService()調用onDestroy方法,我保留this.stopSelf(),但它沒有工作 – user2717010

+0

是你做任何計數器操作使用匿名類或任何其他意思內pendingCount()...如果是的話,我想我知道解決方案 –

回答

0

您必須從其他活動撥打stopService()。或者,在所需工作完成時,您可以在服務中撥打stopSelf()(而不是在onDestroy())。

+0

是的,我叫stopService()從當用戶點擊後退按鈕時,我開始了該服務的活動。 – user2717010

+0

嘗試刪除靜態塊,我想這是保持服務活着。還嘗試從'onStartCommand'返回'2'並移除'onStart()'方法。 'onDestroy()'中的'stopSelf()'是多餘的。 – sha256

0

嘗試使用此代碼可能會對您有所幫助。

stopService(new Intent(MainActivity.this,BackgroundService.class)); 
0

我可以看到你的stopservice()工作正常,停止服務,但匿名類或)什麼都使用的是內部pendingCount(即使服務被破壞仍在工作.. 所以做一些這樣

事情上升的OnDestroy標誌(),並檢查這裏面pendingCount()循環部分,如果這個標誌是高摧毀這個任務也。若要獲得更準確的答案,請添加完成pendingCount() 代碼

0

您可以檢查我之前發佈的answer並嘗試實現該功能。希望對你有效。