Как я могу остановить свой сервис, используя приемник вещания - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь остановить свой сервис с помощью stopService (), но он все еще работает.Он останавливается только тогда, когда я отменяю регистрацию приемника Brodcast, но когда я регистрирую это снова, одновременно будут активированы два действия.Тема все еще работает, я действительно все перепробовал и читал каждый пост на форуме, но не нашел решения.

Service Class

public class MyService extends Service {

    final static String MY_ACTION = "MY_ACTION";
    private static Context context;
    private Timer timer;
    public  String Data;
    String ok = "Database\n";

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub

        MyThread myThread = new MyThread();
        myThread.start();

        return super.onStartCommand(intent, flags, startId);
    }

    public class MyThread extends Thread{

        @Override
        public void run() {
            // TODO Auto-generated method stub

            try {
                int delay = 1000; // delay for 1 sec.
                int period = 5 * 1000; // repeat every 120 sec.
                timer = new Timer();
                timer.scheduleAtFixedRate(new TimerTask() {
                    public void run() {
                        Calendar c = Calendar.getInstance();
                        Data = String.valueOf((c.get(Calendar.MILLISECOND)));
                        Intent intent = new Intent();
                        intent.setAction(MY_ACTION);
                        intent.putExtra("DATAPASSED", ok);
                        sendBroadcast(intent);
                    }
                }, delay, period);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            stopSelf();
        }

    }
}

MainActivity

    final IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(MyService.MY_ACTION);
    registerReceiver(broadcastReceiver, intentFilter);
    final Intent intent = new Intent(MainActivity.this, MyService.class);
    //Start our own service

    btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //registerReceiver(broadcastReceiver, intentFilter);
            startService(intent);
            }
    });

    btnStop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //unregisterReceiver(broadcastReceiver);
            stopService(intent);
        }
    });
}
@Override
protected void onStop() {
    // TODO Auto-generated method stub
    unregisterReceiver(broadcastReceiver);
    super.onStop();
}
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int datapassed = intent.getIntExtra("DATAPASSED", 0);
        String s = intent.getAction().toString();
        String s1 = intent.getStringExtra("DATAPASSED");
        textview.append(s1);
    }
};

1 Ответ

0 голосов
/ 30 сентября 2018

То, что я делаю неправильно, вызывает метод stopSelf () внутри моего Thread, который вызывает службу, вызывающую метод onDestroy ().Я просто удалил это и добавил myTimer и myTask в качестве локальных переменных, затем я мог добавить myTimer.cancel () onDestroy, и это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...