3

拡張された Application クラスでグローバル変数を更新する IntentService があります。私のアクティビティのいくつかでは、変数がいつ変更されたかを知る必要があります。すべてのアクティビティに BroadcastReceiver を実装する (そしてサービスからインテントを送信する) 必要がありますか?それとも、アクティビティに通知する簡単な方法はありますか?

ありがとうございました!

4

2 に答える 2

7

私もこの種の問題に直面しました。ソリューションの 1 つの放送受信機。しかし、私はそれに満足していません.だから、私は別の方法で試しました.あなたはandrdoidのオブジェクトオブザーバーパターンで詳細を見つけることができます,このリンクを参照してください.

public class TestActivity extends Activity implements Observer {
        BaseApp myBase;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            myBase = (BaseApp) getApplication();
            myBase.getObserver().addObserver(this);
            myBase.getObserver().setValue(10);

        }

        @Override
        public void update(Observable observable, Object data) {
            // This method is notified after data changes.

            Toast.makeText(this, "I am notified" + myBase.getObserver().getValue(),
                    0).show();
        }
    }



    public class Test extends Observable
    {

        private int value=2;

        /**
         * @return the value
         */
        public int getValue() 
        {
            return value;
        }

        /**
         * @param value
         *            the value to set
         */
        public void setValue(int value) 
        {
            this.value = value;
            setChanged();
            notifyObservers();
        }
    }

    package app.tabsample;

    import android.app.Application;

    public class BaseApp extends Application {
        Test mTest;

        @Override
        public void onCreate() {
            super.onCreate();

            mTest = new Test();
        }

        public Test getObserver() {
            return mTest;
        }

    }
于 2012-04-05T05:32:49.727 に答える
5

はい、BroadcastReceivers はまさにこのために設計されました。そうは言っても、BroadcastReceiver と関連するすべてのロジックを持つ単一の親クラスを作成しないのはなぜでしょうか? その後、他のアクティビティがしなければならないことは、その親クラスから継承するだけです。

ブロードキャストを送信するたびに、永続的なストレージ (共有設定など) にある種のグローバル変数も設定する必要があることに注意してください。そうすれば、ブロードキャストが送信されたときにアクティビティの 1 つがフォアグラウンドにない場合、onResume()メソッドに戻ってきたときに永続ストレージ内の変数をチェックし、それに応じて動作させることができます。

于 2012-04-05T05:19:23.833 に答える