0

愛やお金のために表示できなかった ProgressDialog があります。少しの調査で、それをスレッドに入れる必要があることが示唆されました。

その例

public void Update(final int ScheduleId, final Context context) {
    final Handler progressHandler = new Handler() {
        public void handleMessage(Message msg) {
            x.dismiss();
        }
    };        

        x = ProgressDialog.show(context, "Scheduling...", "Calculating and Storing Dates", true, false);        
    new Thread() {
        public void run() {
            // Do Nothing
            boolean bResult = UpdateHistory(ScheduleId, context);
            Log.i("HERE","Finished Here?");
            if (bResult) {  
                progressHandler.sendEmptyMessage(0);
            }
        }
    }.start();
}

しかし、私に起こっているように見えるのは、UpdateHistory がバックグラウンドで実行され続けている間、スピナーが画面から消えてアクティビティが終了することだけです。

UpdateHistory の呼び出しを .start() の下 (スレッドの外) に移動すると、進行状況スピナーがまったく表示されません。

私が行方不明になっているのは正確には何ですか?

このコードはすべてアクティビティにあります。

何をお勧めしますか、ほとんどのウェブサイトはスレッドについて話しているようです。私はできる限りの方法でそれらを実行しようとしました。私が言うように、バックグラウンドでスレッドを実行し、スピナーを1秒間表示するか、関数がフォアグラウンドで実行されている間、スピナーはまったく取得されません。

ありがとうサイモン

4

1 に答える 1

1

好ましい方法は を使用することですが、次のようAsyncTaskに を使用することもできるはずです。Thread

public class MyActivity extends Activity {
    ...
    private static final HANDLER_MESSAGE_SUCCESS = 0;
    private ProgressDialog x;
    ...
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch(msg.what){
            case HANDLER_MESSAGE_SUCCESS:
                x.dismiss();
            default:
                Log.w("Handler","handleMessage / Message type not recognised / msg.what = "+String.valueOf(msg.what));
            }
        }
    };
    private void backgroundProcess(){
        x = ProgressDialog.show(MyActivity.this, "Scheduling...", "Calculating and Storing Dates", true, false);
        Thread backgroundThread = new Thread() {
            @Override
            public void run() {
                boolean bResult = UpdateHistory(ScheduleId, MyActivity.this);
                Log.i("HERE","Finished Here?");
                if (bResult) {  
                    Message msg = Message.obtain();
                    msg.what = HANDLER_MESSAGE_SUCCESS;
                    handler.sendMessage(msg);
                }
            }
        };
        backgroundThread.start();
    }
}
于 2011-01-25T23:16:25.617 に答える