2017-04-12 3 views
1

ユーザーに通知するために、AlertDialogまたはSnanckbarを使用します。表示するには、両方ともActivityコンテキストが必要です。三例:現在の活動から生産ユーザー通知にコンテキストが必要

  • メッセージ:別のスレッドから生じたものだ些細な
  • メッセージ:スレッドがメッセージをブロードキャストすることができますので、私は放送/レシーバ・パターンを実装していますし、活動がメッセージを受信して​​、表示さクロージング活性、例えば活動のマスター開始アクティビティセレクタから生成
  • メッセージは、ユーザがオプションを選択し、コードはいくつかのものを行うと、マスターに戻る

    // Selector activity draft sample 
    mButtonSeelcted.setOnClickListener(new OnClickListener() { 
    @Override 
        public void onClick(View view) { 
        super.onClick(view); 
        doMagicForSelected(); 
        mContext.sendBroadcast(intentForUserMessage); 
        mContext.startActivity(intentToMasterActivity); 
        } 
    }); 
    

レシーバーがキックインするまでに、セレクターのアクティビティーが終了したため、メッセージは表示されません。さらに、AlertDialogが決して却下されないので、WindowLeaked例外が発生します。

どのような考えですか?私は行方不明のパターンがありますか?

答えて

1

、スレッドがメッセージをブロードキャストすることができますので、私は放送/レシーバ・パターンを実装していますし、活動がメッセージ

を受信して​​示しインプロセスのメッセージ・バス(例えば、LocalBroadcastManagerを使用してください緑色のロボットのEventBus)。システムブロードキャストを使用すると、CPUやバッテリーが浪費されるだけでなく、セキュリティ上の問題も発生します(たとえば、すべてのアプリがメッセージにスパイする可能性があります)。

パターンがありますか?

3番目のシナリオでは、破壊されているアクティビティではなく、この情報を表示するのが「マスターアクティビティ」の役割です。したがって、Intentに情報を追加し、startActivity()に渡します。この情報は、「マスターアクティビティ」にその情報を表示するように指示します。

+0

パフォーマンス/セキュリティのヒントありがとうございました:) doMagicGorSelectedメソッドがユーザーにブロードキャストできるexeption(ネットワークの問題など)を取得した場合は、メッセージをブロードキャストします。この方法はマスターについては知らない。 私の主張は、コンテキストが揮発性であり、私がそれを使用している間に破壊/変更することができるという事実をどのように処理すべきかということです。 – denispyr

+0

@denispyr: "私の主張は、文脈が揮発性であり、私がそれを使用している間に破壊/変更することができるということです。" - マスターがダイアログまたはスナックバーを表示するものであれば、ボラティリティはないので、私は懸念を理解していない。 – CommonsWare

+0

私に明確にさせてください。私のドラフトコードに関しては、 'doMagicForSelected()が "displayable"例外(例えば悪い入力)を受け取った場合、それはそのメッセージをブロードキャストします。 Selectorアクティビティはそれを受け取り、ダイアログを表示します。これがonLoadFinishedの間に起こり、問題がなければ、ダイアログが表示されます。活動が終了する前に起きているなら、私は困っています。この場合に従うパターンはありますか? – denispyr

1
  1. スタートstartActivityForResult()を使用してマスター活動(アクティビティA)からセレクタ活動(アクティビティB)。
  2. ダイアログボックスにのマスターの結果を表示してください。
関連する問題