2017-04-17 4 views
0

非同期タスクを実装する際にいくつか問題があります。私はバックグラウンドタスクを一定期間(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の更新が完了したら、バックグラウンドデータを更新する方法はありますか?それは非同期に実行されますが、私は彼らが終了するのを待つ必要があるので、

+0

サーバからロードするために使用asyncTask ... – Opiatefuchs

+0

たぶん、あなたは – PeMaCN

+0

ApplicationData.LoadApplicationDataスレッディングバックグラウンドサービスやマルチを使用することを検討すべきでは呼び出し可能オブジェクトのリストです。それらがすべて完了した後でさえ、私はGUIを更新する。 – Exprove

答えて

0
new Thread(new Runnable() { 

       @Override 
       public void run() { 
       ApplicationData.LoadApplicationData(getApplicationContext());//background thread code 
        runOnUiThread(new Runnable() { 
         public void run() { 
          //the other foreground thread 
         } 
        }); 
       } 

    }).start(); 
+0

@azizbekianはい、しかしUIはブロックされません – Vyacheslav

+0

このコードでどのようにループを達成できるのでしょうか?これを15分で実行しなければなりません。睡眠と睡眠は信頼できますか? – Exprove

+0

@Exprove、AlarmManagerを使用して、長期間にわたり何らかのイベントを充電します。 – Vyacheslav

関連する問題