0

私はこのコードをサービス内に持っています。スケジューラーが起動しない!これの何が悪いの?アプリケーションがバックグラウンドであっても、このサービスで 3 秒ごとにトーストを表示したい...

public class notifService extends Service {
private final ScheduledExecutorService scheduler =Executors.newScheduledThreadPool(1);


@Override
public IBinder onBind(Intent arg0) {
    return null;
}

@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    final Intent intent1 = new Intent(this, notifService.class);


    scheduler.scheduleWithFixedDelay(new Runnable() {
        @Override
        public void run() {
           Toast.makeText(getApplicationContext(),String.valueOf("a"), Toast.LENGTH_LONG).show();

        }
    }, 3, 3, SECONDS);
}

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

1 に答える 1

0

まず、このonStart(Intent,int)メソッドは Service オブジェクトでは非推奨です。

代わりにオーバーライドする必要があります

onStartCommand(Intent intent, int flags, int startId)START_STICKY を返します。これにより、OS によって強制終了された場合でも、サービスが確実に再起動されます。

次に、サービスのコンテキストをトースト ビルダーに渡す必要があります (thisキーワードを使用できます)。

最後に、あなたの意図が何であるかはわかりませんが、Toast.LENGTH_LONG定数を使用して構築しているため、これは常にトーストを表示している可能性があります。

それでも機能しない場合は、サービスを開始するために使用しているコードを投稿してください...

于 2013-03-16T19:38:34.353 に答える