私は最初の Android アプリを作成しています (これまでのところ楽しいことがたくさんあります!)。障害に遭遇しました。Android 4.2 を対象とする SDK ツール 21.1 を使用しています。
設定された時間間隔でメソッドを呼び出すためにアクティビティを登録できるシステムをセットアップしようとしています。UIが応答しなくなるのを避けるために、リクエストの処理が独自のプロセスで処理されるような方法でこれを行いたかったのです。
私はいくつかの読書をしており、いくつかの道を探ってきました。最初は、サービスがこれを行う良い方法だと思っていましたが、OS が無差別にサービスを強制終了できるため、それは良い方法ではないことを示唆するかなりの情報を見つけました。
私は今、ScheduledThreadPoolExecutor の使用を検討しています。メソッドを渡すためのオーバーライド可能なメソッドを使用して、この単純なクラスを作成しました。
public abstract class BaseEvent implements EventListener {
public abstract void onFire(Object... params);
}
メソッドを呼び出すこの実行可能なタスクを作成しました。
public class HeartBeatTask implements Runnable {
private BaseEvent mCallback;
private Object mParams;
public HeartBeatTask(BaseAioEvent callback,Object... params){
mParams = params;
mCallback = callback;
}
@Override
public void run() {
Log.d(LOG_TAG,"Run called");
if(mCallback != null)
{
mCallback.onEvent(mParams);
}
}
}
このように使用します(アクティビティ内)
ScheduledThreadPoolExecutor threadPool = new ScheduledThreadPoolExecutor(1);
BaseEvent callback = new BaseEvent() {
public void onFire(Object... params){
if(params[0] !=null)
{
Context context = (Context)params[0];
Toast toast = Toast.makeText(context, "Task ran", Toast.LENGTH_SHORT);
toast.show();
}
}
};
threadPool.scheduleAtFixedRate(new HeartBeatTask(callback,(this)),0, 5, TimeUnit.SECONDS);
これにより、5 秒ごとにタスクが実行されますが、コールバック メソッドは 1 回だけ実行されます。
これは物事を行うには良い方法ではないかもしれないと考えています。物事を複雑にしすぎているように感じます。私が本当に必要としているのは、メイン スレッド以外のプロセスでメソッドを実行し、設定された間隔でアクティビティが複数のアクションをバインドできる機能を持つことです。したがって、たとえば、データベースへの呼び出しが行われた後に UI コンポーネントを更新したい場合があり、それを 1 分ごとに実行したいとします。
ここで正しい軌道に乗っているかどうか教えてもらえますか? 私がやろうとしていることは、私の目標を達成するための実行可能な方法ですか? 私が取ることができるより良いアプローチはありますか?アドバイスや提案をいただければ幸いです。ありがとう!