0

AsyncTask、Handler、および単純なスレッドを試して、やろうとしていることを達成しましたが、それらのどれも機能させることができません。以下は、UI を更新するために使用する必要があるロジックです...

public class GameProcessor extends Thread {

@Override
public void run() {

    for (Integer integer : sequence) {

        //set button state to pressed
        Console.getBottomLeft().getButton().setBackgroundResource(R.drawable.button_focused);

        try {
            sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //set button state to un-pressed

        try {
            sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    try {
        sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }


}

}

応答しないでください。メイン スレッド以外のどこからでも UI を更新することはできません。私はすでにこれを知っており、UI を同時に更新しながらバックエンドからいくつかの値をループする方法についての解決策が必要です。私が知る限り、AsyncTask と Handler はあまり役に立ちません。

どんな助けでも大歓迎です!

4

5 に答える 5

3

UI スレッドについて知っている場合は、次のことを試してみてください。

runOnUiThread(new Runnable() {
    public void run() {
        //set button state to un-pressed or pressed.. or whatever you want..
    }
});

私はあなたの問題を理解していません

于 2013-08-14T02:03:33.500 に答える
0

UI スレッドを更新するには、ハンドラーを使用できます。AsyncTask と Handler を使用した簡単な例を次に示します。

    private static final String MESSAGE_KEY = "com.example.mypackage.MSGKEY";
    private static final int MESSAGE_AUTHENTICATING = 0;
    private static final int MESSAGE_AUTHENTICATED = 1;

    /**
     * This handler will update UI 
     * 
     */
    private final Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.getData().getInt(MESSAGE_KEY)) {
            case MESSAGE_AUTHENTICATING:
                hashstream_stream.setVisibility(View.GONE);
                hashstream_progress.setVisibility(View.VISIBLE);
                break;
            case MESSAGE_AUTHENTICATED:
                hashstream_stream.setVisibility(View.VISIBLE);
                hashstream_progress.setVisibility(View.GONE);
                break;
            default:
                break;

            }
        }
    };

    /**
    * This method should be used to update UI thread.
    * 
    * @param value
    */
    private void postMessage(int value) {
        Message msgObj = handler.obtainMessage();
        Bundle bundle = new Bundle();
        bundle.putInt(MESSAGE_KEY, value);
        msgObj.setData(bundle);
        handler.sendMessage(msgObj);
    }

    /**
     * AsyncTask Helper class as network op
     * 
     * 
     */
    private class StreamHashTagTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

            //Do actual operation in here

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            postMessage(MESSAGE_AUTHENTICATED);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            postMessage(MESSAGE_AUTHENTICATING);
        }

        /**
         * If you need to update progress override onProgressUpdate() method.
         * Since I am indeterminate using progress bar as authentication time
         * cannot be calculated , I don't need update here
         */

    }
于 2013-08-14T02:07:44.300 に答える