2017-04-08 175 views
1

我正在創建一個運行服務的應用程序,其中一個函數在5秒內被重複調用。我可以通過點擊一個按鈕啓動服務,但當另一個按鈕被點擊時不能停止!服務不停止

我的代碼是:

public class LocationService extends Service implements LocationListener { 
    public static final String MyPREFERENCES = "MyPrefs" ; 
    public static final String TAG = "MyServiceTag"; 
    Timer t; 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 
    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
    } 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     t = new Timer(); 
     t.scheduleAtFixedRate(
       new TimerTask() 
       { 
        public void run() 
        { 
         startJob(); 
        } 
       }, 
       0,  // run first occurrence immediatetly 
       5000); // run every 60 seconds 
     return START_STICKY; 
    } 

    @Override 
    public boolean stopService(Intent name) { 
     // TODO Auto-generated method stub 
     t.cancel(); 
     t.cancel(); 
     return super.stopService(name); 

    } 

啓動和停止在其他活動完成。

public void popupstart() { 
     android.app.AlertDialog.Builder alertDialog = new android.app.AlertDialog.Builder(this); 
     alertDialog.setTitle("Enable Location Sharing"); 
     alertDialog.setMessage("Enable location sharing will broadcast your location to clients applications. This is a battery draining process and kindly turn off " + 
       "location sharing after use"); 
     alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       SharedPreferences.Editor editor = sharedpreferences.edit(); 
       editor.putString("shareLocation", "yes"); 
       editor.commit(); 
       liveStatus = "1"; 
       mFab = (FloatingActionButton)findViewById(R.id.fab); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        mFab.setImageDrawable(ContextCompat.getDrawable(gnavigationActivity.this, R.drawable.locationon)); 
       } 
       else{ 
        mFab.setImageDrawable(getResources().getDrawable(R.drawable.locationon)); 
       } 
       if(!isMyServiceRunning(LocationService.class)) { 
        Toast.makeText(gnavigationActivity.this, "Location Sharing started", Toast.LENGTH_LONG).show(); 
        processStartService(LocationService.TAG); 
       } 
       else{ 
        Toast.makeText(gnavigationActivity.this, "Location Sharing already started", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
     alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 
     alertDialog.show(); 
    } 





public void popupstop() { 
     android.app.AlertDialog.Builder alertDialog = new android.app.AlertDialog.Builder(this); 
     alertDialog.setTitle("Stop Location Sharing"); 
     alertDialog.setMessage("You are about to stop location sharing which now will not broadcast location to client users. Are you sure?"); 
     alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       processStopService(LocationService.TAG); 
       Toast.makeText(gnavigationActivity.this, "Location Sharing Stoped", Toast.LENGTH_LONG).show(); 
       SharedPreferences.Editor editor = sharedpreferences.edit(); 
       editor.putString("shareLocation", "no"); 
       editor.commit(); 
       liveStatus = "0"; 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        mFab.setImageDrawable(ContextCompat.getDrawable(gnavigationActivity.this, R.drawable.locationoff)); 
       } 
       else{ 
        mFab.setImageDrawable(getResources().getDrawable(R.drawable.locationoff)); 
       } 
      } 
     }); 
     alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 
     alertDialog.show(); 
    } 

private void processStartService(final String tag) { 
     Intent intent = new Intent(getApplicationContext(), LocationService.class); 
     intent.addCategory(tag); 
     startService(intent); 
    } 
    private void processStopService(final String tag) { 
     Intent intent = new Intent(getApplicationContext(), LocationService.class); 
     intent.addCategory(tag); 
     stopService(intent); 
    } 

回答

1

打電話stopService(intent);

覆蓋方法的onDestroy將開始

嘗試這樣做

@Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     t.cancel(); 
     t.cancel(); 
    }