数秒ごとにいくつかの FTP 処理を実行する必要がある小さな Android アプリケーションがあります。UI スレッドでネットワーク関連の処理を実行することは、Android があまり好まないことであるという難しい方法を学んだ後、私は次の解決策にたどり着きました。
// This class gets declared inside my Activity
private class CheckFtpTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... dummy) {
Thread.currentThread().setName("CheckFtpTask");
// Here I'll do the FTP stuff
ftpStuff();
return null;
}
}
// Member variables inside my activity
private Handler checkFtpHandler;
private Runnable checkFtpRunnable;
// I set up the task later in some of my Activitiy's method:
checkFtpHandler = new Handler();
checkFtpRunnable = new Runnable() {
@Override
public void run() {
new CheckFtpTask().execute((Void[])null);
checkFtpHandler.postDelayed(checkFtpRunnable, 5000);
}
};
checkFtpRunnable.run();
UI スレッドで直接実行できない定期的なタスクを実行することは良い習慣ですか? さらに、呼び出して常に新しい AsyncTask オブジェクトを作成する代わりに、
new CheckFtpTask().execute((Void[])null);
CheckFtpTask
オブジェクトを一度作成してから再利用するオプションはありますか? または、それは私に副作用を与えますか?
前もってありがとう、イェンス。