0

内部で呼び出そうとするコードは次のとおりですonCreate()

        _t = new TheThread(this);
        pd = new ProgressDialog(this);
        pd.setMessage("Trip Detection ..");
        pd.show();
        _t.start();
        while(_t.isAlive()){
            //DO NOTHING..WIAITING TILL MAIN THREAD FISHIN
        }
        printToScreen();
        pd.dismiss();          

printToScreen() は、リスト ビューを更新します。リスト ビューの内容は、tread _t を使用して更新されます。しかし、このメソッドを呼び出すと、「待機中」のメッセージが表示されません。以前と同じように電話がフリーズします(スレッドでコンテンツを実行していなかったとき)。助言がありますか ?

4

4 に答える 4

1

AsyncTask を使用する

private class DownloadingProgressTask extends
        AsyncTask<String, Void, Boolean> {

    private ProgressDialog dialog = new ProgressDialog(ShowDescription.this);

    /** progress dialog to show user that the backup is processing. */

    /** application context. */

    protected void onPreExecute() {
         this.dialog.setMessage("Please wait");
         this.dialog.show();
    }

    protected Boolean doInBackground(final String... args) {
        try {
            downloadFile(b.getString("URL"));
            return true;
        } catch (Exception e) {
            Log.e("tag", "error", e);
            return false;
        }
    }

    @Override
    protected void onPostExecute(final Boolean success) {

        if (dialog.isShowing()) {
            dialog.dismiss();
        }

        if (success) {
            Toast.makeText(ShowDescription.this,
                    "File successfully downloaded", Toast.LENGTH_LONG)
                    .show();
            imgDownload.setVisibility(8);
        } else {
            Toast.makeText(ShowDescription.this, "Error", Toast.LENGTH_LONG)
                    .show();
        }
    }
于 2012-06-07T11:10:53.837 に答える
1

以下のスニペットが役立ちます。

progressDialog.show();

    new Thread()
      {
        public void run()
         {
             //do async operations here

             handler.sendEmptyMessage(0);
         } 
      }.start();

    Handler handler = new Handler()
            {

                @Override
                public void handleMessage(Message msg)
                {
                    progressDialog.dismiss();
                    super.handleMessage(msg);
                }

            };
于 2012-06-07T11:11:31.120 に答える
0

次のようにダイアログを作成します

pd = ProgressDialog.show(this, "Loading..", "Please Wait..", true,false);
new Thread(new Runnable() {                 
            @Override
            public void run() { 
                                               // your code here
                    }
        }).start();             
于 2012-06-07T11:08:02.233 に答える
0
class doback extends AsyncTask < URL, Integer, Long > {

    protected Long doInBackground(URL...arg0) {
        try {

        } catch (Exception e) {

        }
        return null;
    }

    protected void onProgressUpdate(Integer...progress) {

    }

    protected void onPostExecute(Long result) {
        try {
            dialog.dismiss();
        } catch (Exception e) {
            e.printStackTrace();
            dialog.dismiss();
        }
    }

}
于 2012-06-07T11:03:37.480 に答える