1. ホーム
  2. android

[解決済み] X秒ごとにメソッドを実行する方法

2022-05-16 04:01:13

質問

Android 2.3.3アプリケーションを開発しています。 X秒 .

iOSでは NSTimer がありますが、Androidでは何を使えばいいのかわかりません。

どなたかお勧めの ハンドラ 別の人が私を推薦しています。 アラームマネージャ を推奨されましたが、どちらの方法が NSTimer .

これはAndroidで実装したいコードです。

timer2 = [
    NSTimer scheduledTimerWithTimeInterval:(1.0f/20.0f)
    target:self
    selector:@selector(loopTask)
    userInfo:nil
    repeats:YES
];

timer1 = [
    NSTimer scheduledTimerWithTimeInterval:(1.0f/4.0f)
    target:self
    selector:@selector(isFree)
    userInfo:nil
    repeats:YES
];

次のようなものが必要です。 NSTimer .

私のおすすめは?

どのように解決するのですか?

あなたが使用するソリューションは、関数の各実行間にどれくらいの時間待つ必要があるかに本当に依存します。

もし10分以上待つのであれば、私は AlarmManager .

// Some time when you want to run
Date when = new Date(System.currentTimeMillis());

try {
    Intent someIntent = new Intent(someContext, MyReceiver.class); // intent to be launched

    // Note: this could be getActivity if you want to launch an activity
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
        context,
        0, // id (optional)
        someIntent, // intent to launch
        PendingIntent.FLAG_CANCEL_CURRENT // PendingIntent flag
    );

    AlarmManager alarms = (AlarmManager) context.getSystemService(
        Context.ALARM_SERVICE
    );

    alarms.setRepeating(
        AlarmManager.RTC_WAKEUP,
        when.getTime(),
        AlarmManager.INTERVAL_FIFTEEN_MINUTES,
        pendingIntent
    );
} catch(Exception e) {
    e.printStackTrace();
}

上記をブロードキャストしたら Intent を受信することができます。 Intent を実装することで BroadcastReceiver . これはアプリケーションマニフェストに登録するか、または context.registerReceiver(receiver, intentFilter); メソッドで登録する必要があります。 の詳細については BroadcastReceiver の詳細については、公式ドキュメントを参照してください。 .

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent)
    {
        System.out.println("MyReceiver: here!") // Do your work here
    }
}

もし10分より短い時間待つのであれば、私は Handler .

final Handler handler = new Handler();
final int delay = 1000; // 1000 milliseconds == 1 second

handler.postDelayed(new Runnable() {
    public void run() {
        System.out.println("myHandler: here!"); // Do your work here
        handler.postDelayed(this, delay);
    }
}, delay);