0

アプリにいくつかのスクリーン キャプチャを取り、ボタン クリックで次のアクティビティに移動するアクティビティがあります。スクリーンショットを撮っている間、進行状況やステータスをユーザーに表示したい(5〜8秒かかります)。で使っAsyncTaskてみrunOnUithread()ます。しかし、運がありません。コード全体をdoInBackground(). これを行うためのより良い方法は何ですか? これが私のコードです:

public class TakeScreenShots extends AsyncTask<Void, Void, Void> {
        private ProgressDialog dialog;


            @Override
            protected void onPreExecute() {
                this.dialog = ProgressDialog.show(MyActivity.this, "MyTitle",
                        "Loading .....", true);

            }

            @Override
            protected Void doInBackground(Void... params) {
                 MyActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        takeScreenshots();

                    }
                }); 

                return null;
            }

            @Override
            protected void onPostExecute(Void unused) {
                gotoNextActivity();

                this.dialog.dismiss();

            }

        }
4

2 に答える 2

1

いいえ、あなたは間違っています。代わりにrunOnUiThread直接キャプチャしますdoInBackground()

これが実際の例です

public class backImageProcess extends AsyncTask<Void, Void, Void>
    {
private ProgressDialog dialog;
        @Override
        protected void onPreExecute() {

            this.dialog = ProgressDialog.show(MyActivity.this, "MyTitle",
                        "Loading .....", true);

            try {
                File mFile= new File(mTempImagename);
                if(mFile!=null)
                    mFile.delete();
            } catch (Exception e) {
            }   

            super.onPreExecute();
        }
        @Override
        protected Void doInBackground(Void... params) {
            mLayoutRoot.setDrawingCacheEnabled(true);
            mLayoutRoot.buildDrawingCache();

            Bitmap mBitmap= mLayoutRoot.getDrawingCache();
            try {
                if(mBitmap!=null)
                {
                    FileOutputStream out = new FileOutputStream(mTempImagename);
                    mBitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
                    out.flush();
                    out.close();
                }
            } catch (Exception e) { }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if(this.dialog!=null)
                this.dialog.dismiss();

            gotoNextActivity();

        }
    }
于 2012-11-27T10:43:07.333 に答える
0

この質問の回答から回答を得ました。画像ビューにドローアブルを設定していました。そのため、その行を Ui Thread に保持し、doInBackground() に残しました。

于 2012-11-27T11:19:50.577 に答える