4

別のスレッドを使用して画像のバックグラウンド処理を行う Android サービスがあります。このサービスでエラーが発生した場合、またはスレッドでさらに悪化した場合、起動するアクティビティに問題を通知し、アプリケーションを安定した状態 (つまり、サービスを起動する前の状態) に回復できるようにするためのベスト プラクティスは何ですか。

サービス内からトーストまたは通知を投稿できますが、それは役に立ちません。問題についてユーザーに通知したいのですが、同時にアプリケーションを安定した状態に回復させたいと考えています。

4

2 に答える 2

2

誰かがこれを検索した場合に備えて、私が何をしたかを説明します。

サービス内に、 AsyncTaskを拡張するプライベート クラスを追加しました。これですべての処理が完了しました。

このクラスには、プライベート変数「例外」があります。doInBackgroundメソッドの内容はtry/catch で囲まれ、キャッチされた例外はすべて「exception」に格納されます。onPostExecuteメソッドで、「例外」が設定されているかどうかを確認し、設定されている場合は、呼び出し元のアクティビティに通知されるように、例外の詳細を含むブロードキャストPROCESSING_ERROR を送信します。

AsyncTaskdoInBackground 、またはonPostExecuteが何であるかがわからない場合は、次を読む必要があります。

于 2012-11-30T08:32:58.580 に答える
1

を使用しMessengerて、サービスとメイン アプリケーションの間で情報を渡すことができます。

次のように、メイン アクティビティでメッセンジャーを定義します。

private Messenger = mMessengerCliente = new Messenger(new IncomingHandler());

/**
 * Handler of incoming messages from service.
 */
private class IncomingHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case MSG_1:
                //actions to perform on message type 1
                break;
            case MSG_2:
                //actions to perform on message type 2
                break;
            default:
                super.handleMessage(msg);
        }
    }
}

サービスにバインドするときに、Messengerオブジェクトをor として渡します。Extra

サービスで、オブジェクトを回復し、Messengerそれを使用して通信を返します。

                mMsgClientMain = (Messenger)intent.getExtras().get(EXTRA_MESSENGER);

                Message msg = Message.obtain(null, MSG_1, arg1, arg2);
                msg.replyTo=reply_to; // if you need to have bidirectional communication, pass here the service messenger object
                mMsgClientMain.send(msg);

よろしく。

于 2012-10-28T16:56:17.317 に答える