服务没有停止

时间:2017-04-08 12:40:09

标签: android service

我正在创建一个运行服务的应用程序,在该服务中,在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 个答案:

答案 0 :(得分:1)

致电停止服务(意图);

覆盖方法 onDestroy 将启动

尝试这样做

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