0

CPU 使用率と周波数を読み取り、通知バーに表示するバックグラウンド サービスがあります。

アプリケーション設定(設定)には、周波数のみの負荷のみ、またはその両方を表示するオプションがあります

ただし、共有設定を取得する方法は、最新の SharedPreference を取得しません

サービスが初めて開始されたときにのみ SharedPreference を取得し、設定画面で別のオプションを選択した場合、サービスで更新されません

ここにコードがあります

@Override
public int onStartCommand(Intent intent, int flags, int startId) {


    Runnable runnable = new Runnable() {@Override
        public void run() {
            while (thread) {

                sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
                items = sharedPrefs.getString("notif", "freq");
                System.out.println(items); //this keeps displaying the same value even if i go to Preference screen and change to something else
                if (items.equals("freq") || items.equals("both")) {

                }
                if (items.equals("load") || items.equals("both")) {

                } //reading frequency and load depending on what is selected
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                mHandler.post(new Runnable() {@Override
                    public void run() {
                        if (thread) {
                            createNotification(); //create notification
                        }
                    }
                });
            }
        }
    };
    new Thread(runnable).start();

    return START_STICKY;
}
4

3 に答える 3

1

解決した

私のサービスは別のプロセスで実行されていたため、共有設定にアクセスするときにこのフラグを追加する必要がありました

private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS;

このように変更します

sharedPrefs = this.getSharedPreferences("preference name", PREFERENCES_MODE);
于 2012-11-19T12:05:36.310 に答える
0

エラーは行にあると思います

sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);

スレッド内から「これ」をどこに渡していますか? アプリケーションのコンテキストで変更できますか?

于 2012-11-19T12:03:20.577 に答える
0

ドキュメントが言うように、データを共有設定に正しく書き込むことを確認してください。具体的にはcommit()、変更を行います。

エディターで行ったすべての変更はバッチ処理され、commit() または apply() を呼び出すまで元の SharedPreferences にコピーされません。

コード例は次のとおりです。

SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean( key, value );
editor.commit();
于 2012-11-19T11:29:40.150 に答える