0

私は放送局とのForegoundサービスを持っています。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // Service  
    Log.d("Service","Service started");

    startTime = intent.getLongExtra("STARTTIME", 0);
    endTime = intent.getLongExtra("ENDTIME", 0);
    isRunning = true;

    postNotification();

    // Broadcaster
    handler.removeCallbacks(updateRunnable);
    handler.postDelayed(updateRunnable, DELAY);

    return START_STICKY;
}

サービスを停止しようとするonDestroy()と、すべてが正常に実行されますが、updateRunnable続行されるため、ブロードキャストは引き続き発生します。

private Runnable updateRunnable = new Runnable() {
    public void run() {

        Log.d("Service", "run");            
        currentTime = System.currentTimeMillis();

        if(endTime > 0 && (currentTime-startTime) >= endTime) {
            isRunning = false;

            // Alarm
            AlarmNotification alarmNotification = new AlarmNotification(context);
            alarmNotification.startAlarm();

            // Notification
            AppNotification notify = new AppNotification(context);
            notify.stopNotification();

            update();

            // Tried them all:
            stopService(intentBroadcaster);
            stopForeground(true);
            stopSelf();
        } else {
            update();
        }
    handler.postDelayed(this, 1000); // 1 seconds
    }
};

ご覧のとおり、私は考えられるすべての停止コマンドを試しました。私はここで何が間違っているのですか?ブロードキャスト/実行可能を停止するにはどうすればよいですか?

4

1 に答える 1

0

アプリケーションプロセスがまだ実行されているため、ブロードキャスターは実行を継続します。そのため、指示しない限り、スレッドは実行を継続します。

runメソッドでスレッドを停止するのは簡単です。

private boolean shouldContinue = true;
private Runnable updateRunnable = new Runnable() {
    public void run(){
         // ... whaterver your doing
         if(shouldContinue){
             handler.postDelayed(this, 1000);
         }
    }
};

public void onDestroy(){
    shouldContinue = false;
}
于 2012-08-10T02:09:01.030 に答える