私はAndroidアプリケーションを作成したいと思います。このアプリケーションは、開いたときに20秒後にメソッドを呼び出し、次に10秒ごとにメソッドを自動呼び出しします。
続行する方法について何か考えはありますか?
次のように単一のHandler
でそれを行うことができます:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 20 seconds
}
}, 20000); //the time is in miliseconds
同じことを10秒ごとに繰り返すには、同じメソッドで次の行を追加します。
handler.postDelayed(this, 10000);
このような:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 20 seconds
handler.postDelayed(this, 10000);
}
}, 20000); //the time is in miliseconds
アプリケーションがアクティブでない場合でもアラームマネージャーを使用できます(閉じる)
それを止めないまで走り続ける。
ここに完全な例があります
http://javatechig.com/Android/repeat-alarm-example-in-Android
ハンドラオブジェクトを宣言します:
Handler myHandler = new Handler();
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 20 seconds
//call the method which is schedule to call after 20 sec
}
}, 200000); //the time is in miliseconds
-again for 10 seconds上記と同じようにしてループを繰り返します
これが役立つことを願っています...ありがとう
以下のコードを確認してください。
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Enter your code
}
}, 0, 20000);//put here time 1000 milliseconds=1 second
このコードがお役に立てば幸いです。
CountDownTimer cdt;
cdt = new CountDownTimer(timeint * 60 * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.i(TAG, millisUntilFinished " millis left");
}
@Override
public void onFinish() {
Log.i(TAG, "Timer finished");
}
};
cdt.start();
Timer を使用でき、その実装では次のように実行できます
new Java.util.Timer().schedule(
new Java.util.TimerTask() {
@Override
public void run() {
// your code here
}
},
5000
);
そのためには、カスタムハンドラーを使用する必要があります。必要なものの例を次に示します。
public class Main extends Activity {
private TextView txtStatus;
private RefreshHandler mRedrawHandler = new RefreshHandler();
class RefreshHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Main.this.updateUI();
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
};
private void updateUI(){
int currentInt = Integer.parseInt((String) txtStatus.getText()) + 10;
if(currentInt <= 100){
mRedrawHandler.sleep(10000);
txtStatus.setText(String.valueOf(currentInt));
}
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
this.txtStatus = (TextView) this.findViewById(R.id.txtStatus);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
updateUI();
}
}, 20000);
}
}
20秒ごとにHandlerを呼び出し、すべてのパスでUIを更新する必要があります。
コードは次のようになります。
final Handler handler = new Handler();//class variable
int count = 0;
handler.post(new Runnable() {
@Override
public void run() {
updateCounter(count++);
if(count < (10*20000)) {
handler.postDelayed(this, 20000);
}
}
});
そしてカウンターを更新する関数:
private void updateCounter(final int count) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// you have the seconds passed
// do what ever you want
}
});
}
タイマークラスを使用する
private CountDownTimer countDownTimer;
private void startTimer(final Context context) {
if (countDownTimer != null) {
countDownTimer.cancel();
countDownTimer = null;
}
countDownTimer = new CountDownTimer(20 * 1000, 1 * 1000) {
public void onTick(long millisUntilFinished) {
//
}
public void onFinish() {
yourMethod();
startTimer(context);
}
}
}.start();
}