毎秒ハンドラーからのAndroidアップデートui

Runnable/HandlerからUIを毎秒更新するのに少し助けが必要です。私はこのコードを使用しています:

Runnable runnable = new Runnable() {
        @Override
        public void run() {
                handler.post(new Runnable() {
                    @Override
                    public void run() {

                        prBar.setProgress(myProgress);
                        y = (double) ( (double) myProgress/ (double) RPCCommunicator.totalPackets)*100;
                        txtInfoSync1.setText(Integer.toString((int)y) + "%");
                        prBar.setMax(RPCCommunicator.totalPackets);

                        int tmp = totalBytesReceived - timerSaved;
                        Log.w("","totalBytesReceived : "+totalBytesReceived + " timerSaved : "+timerSaved );
                        Log.w("","tmp : "+tmp);

                        if (avgSpeedCalc.size() > 10)
                        {
                            avgSpeedCalc.remove(0);
                        }

                        avgSpeedCalc.add(tmp);

                        int x = 0;

                        for (int y=0;y

私は onCreate() handler.postDelayed(runnable、1000); を試しましたが、実行可能ファイルは決して起動しません。あるいは、私が runnable.run(); で試しても、まだ動作していません。

任意のアイデアどのように私はrunnable /ハンドラを起動し、uiを毎秒更新することができますか?

7

2 答え

なぜあなたは実行可能ファイルで実行可能ファイルを作成していますか?

これを試して:

// flag that should be set true if handler should stop
boolean mStopHandler = false;

Runnable runnable = new Runnable() {
    @Override
    public void run() {
       //do your stuff - don't create a new runnable here!
        if (!mStopHandler) {
            mHandler.postDelayed(this, 1000);
        }
    }
};

// start it with:
mHandler.post(runnable);
26
追加された
どのように私はそれを後停止することができますか?私はインターネット上でデータを取得しているときにのみ実行する必要があることを意味し、アクティビティの終了またはユーザーがキャンセルボタンをクリックした後に実行可能ファイルを停止する必要があります。
追加された 著者 Android-Droid,
実際、 handler.removeCallbacks(runnable); も同じことをしています。
追加された 著者 Android-Droid,
私の答えを更新し、旗を導入しました
追加された 著者 WarrenFaith,
それは本当ですが、遅延が長い場合はこれが好ましいです.1秒の間隔に関しては、実際の違いはありません
追加された 著者 WarrenFaith,
@Radu現在のコードは永遠に実行されます。 mStopHandler はtrueで、 postDelayed(this、1000); は1秒後に実行可能ファイルを再起動します。
追加された 著者 WarrenFaith,
@Raduそれはあなたがこのコードを置く場所に依存します。もちろん、それをメンバ変数(メソッドの mHandler.post(runnable)を除く)としてメソッドの外に定義すると、使用する変数のどれもfinalである必要はありません。メソッドに完全なコードを記述する場合は、mStopHandlerとmHandlerをfinalにする必要があります。
追加された 著者 WarrenFaith,
@IGOTSARフラグをfalseにしてmHandler.post(runnable)をもう一度呼び出す
追加された 著者 WarrenFaith,
@WarrenFaithあなたのrunnableは一度だけ実行されます!右?!永遠に走らせる正しい方法は何ですか?
追加された 著者 Radu,
@WarrenFaith実行可能な最終決定をする必要はありませんか?
追加された 著者 Radu,
@ワーレンファイスありがとう!
追加された 著者 Radu,
上記のコードはトグルボタンの状態を切り替えるために使用できますか?
追加された 著者 user6602265,
@WarrenFaith mStophandlerをtrueにした後、同じハンドラを再起動するにはどうすればいいですか、別のハンドラを作成する必要はありますか?
追加された 著者 Abhinav,

UIを更新したい場合は、これが最適なオプションだと思います

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //Do your work
            }
        },500);
2
追加された
上記のコードはトグルボタンの状態を切り替えるために使用できますか?
追加された 著者 user6602265,