1

進行状況を報告したい長いプロセスを持つAndroidアプリに取り組んでいます。

プロセスのソースがないため、プロセス自体に完了率を報告させることができません。なんとか巻かなければなりません。バックグラウンドで実行するプロセスも必要です。

私には、これは AsyncTask の適切なケースのように思えましたが、1 つの長いプロセスがあるため、タスクの開始時と終了時の進行状況しか報告できません。

長いプロセス (ソースがない) の実行中に進行状況を UI に報告できるように、Android でこれを記述する最良の方法は何ですか?

Handler を含む AsyncTask を使用してみましたが、うまくいかなかったようです (「java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()」で失敗しました)。

編集:注、長いプロセスの開始時と終了時に「publishProgress」を呼び出しています。1 つの巨大なプロセスの実行中にそれを呼び出す方法を理解する必要があります。

編集 2: UI は、報告しないとプロセスを強制終了するため、実行中に報告する必要があります...

4

2 に答える 2

1

これは、ハックなソリューションです。

public class LongAction {
    public AtomicBoolean finished = new AtomicBoolean();
    private final Handler h;      

    /* attributes you need */

    public LongAction(Handler h /* parameters you need to initialice attibutes */) {
        this.h = h;
        // Initialization
    }

    public void doLongTask() {
        finished.set(false);
        new Runnable() {
            @Override
            public void run() {
                // your long task
                finished.set(true);
            }
        }.run();
        new Runnable() {
            @Override
            public void run() {
                while (!finished.get()) {
                }
                Message m = Message.obtain();
                m.what = 0;
                m.arg1 = 50;
                h.sendMessage(m);
            }
        }.run();
    }
}
于 2013-10-10T15:52:50.027 に答える
0

長時間実行されるタスクを制御できないため、他に何ができるかわかりません。基本的な AsyncTask は、必要なものに十分に見えます。

AsyncTask.doInBackground() で、操作が進行中である (または何らかのアニメーションを開始する) ことをユーザーに知らせるテキストを表示できます。そして、AsyncTask.onPostExecute() で完了メッセージを表示 (またはアニメーションを停止) します。

他に何ができるかわかりません。AsyncTask.onProgress() があなたのケースに役立つとは思いません。

直接関係ありません: 操作が進行中の場合、アクティビティの一部の機能を無効にすることもできます。また、ライフサイクルについて何をしたいかにも注意する必要があります (プロセスの進行中にアクティビティが強制終了された場合)。

于 2013-10-10T16:51:31.920 に答える