非同期タスクを実装する際にいくつか問題があります。私はバックグラウンドタスクを一定期間(15分、デバッグ目的のために10秒間)実行したいと思っています。ハンドラーフリーズGUI Android
マイコード:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
ApplicationData.LoadApplicationData(getApplicationContext()); //Like SystemClock.sleep(2000)
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
}
try{
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragmentcontent);
if(currentFragment != null) {
FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
fragTransaction.detach(currentFragment);
fragTransaction.attach(currentFragment);
fragTransaction.commit();
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
}
catch (Exception e) {
}
finally{
handler.postDelayed(this, 10000); //900000
}
}
},10000);
このコードは、2-4秒間アプリをフリーズします。 ApplicationData.LoadApplicationDataはサーバーからデータをロードし、その時間がかかります。私の最初の試みでは、スレッドを作成していたので、この作業は非同期で行われますが、フラグメントを更新できませんでした。
GUIの更新が完了したら、バックグラウンドデータを更新する方法はありますか?それは非同期に実行されますが、私は彼らが終了するのを待つ必要があるので、
サーバからロードするために使用asyncTask ... – Opiatefuchs
たぶん、あなたは – PeMaCN
ApplicationData.LoadApplicationDataスレッディングバックグラウンドサービスやマルチを使用することを検討すべきでは呼び出し可能オブジェクトのリストです。それらがすべて完了した後でさえ、私はGUIを更新する。 – Exprove