gpt4 book ai didi

android - 远程服务 & PreferenceActivity

转载 作者:搜寻专家 更新时间:2023-11-01 09:13:28 32 4
gpt4 key购买 nike

我的应用程序包含一个根据首选项值刷新数据的服务。我的应用程序中还有一个 PreferenceActivity 来更改这些值。

我的服务实现 OnSharedPreferenceChangeListener,获取首选项并注册监听器。我可以获得首选项值,但如果我更改数据 Activity 中的首选项,则不会调用 onSharedPreferencesChanged(因此不会更新数据)。

有没有办法在不绑定(bind) PreferenceActivity 和服务的情况下解决这个问题?

谢谢

public class EventsService extends Service implements OnSharedPreferenceChangeListener {
...
private SharedPreferences preferences;
...

@Override
public void onCreate() {
super.onCreate();
...
preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.registerOnSharedPreferenceChangeListener(this);
...
}

//On the same way i unregistered the listener onDestroy()

private TimerTask updateTask = new TimerTask() {
@Override
public void run() {
....
Log.v(TAG,"PREF : "+Integer.parseInt(preferences.getString("special_reminder_minutes","10")));
....
}
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d(TAG,"PREF CHANGED O -----------------------");

}
}

注意:目前,首选项只包含一个字符串数组。

最佳答案

通过使用发送到“startService()”的 Intent 来解耦服务和首选项。该函数的命名很糟糕——它不仅仅是启动服务(如果需要它会启动它)。 startService() 还将向已在运行的服务发送消息。

因此,在您的偏好监听器中,在您的偏好 Activity 中,您会调用如下内容:

Intent messageIntent = new Intent(context, MyService.class);
messageIntent.setAction(MyService.GAME_ALERT);
messageIntent.putExtra(MyService.GAME_ID, gameId);
context.startService(messageIntent);

要在服务中接收此消息,您需要像这样覆盖 onStartService()(请注意,粘性是可选的——取决于您服务的用例):

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent == null)
return START_STICKY;

try {
String action = intent.getAction();
if (GAME_ALERT.equals(action)) {
// handle it
String gameId = intent.getStringExtra(GAME_ID);
if (gameId != null) {
//
}
}
} catch (Throwable e) {
Log.e("me", "problem: ", e);
}

// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}

关于android - 远程服务 & PreferenceActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6465466/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com