我有活动和服务,我想获得服务整数的引用,该服务整数在Service中不时更新。我的问题是,在我的Activity中,我只得到第一个声明为Value的整数(例如0)。
我的主要目标是每次开始我的计划时都知道服务的更新价值。
主要活动:
if(Service.doesCounter>0){
//do something
//in this state Service.doesCounter always is 0(checked by log)
}
服务:
public static int doesCounter=0; // declared after class as class memeber
//code where I start my method does();
.....
public void does(){
doesCounter++;
Log.e("cccccc","Service Counter "+doesCounter); // everything ok, value is changing as suppose to.
}
修改
我的共享偏好设置课程:
public class AppPreferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
private static final String APP_SHARED_PREFS = "com.aydabtu.BroadcastSMS_preferences"; // Name of the file -.xml
private SharedPreferences appSharedPrefs;
private Editor prefsEditor;
public AppPreferences(Context context)
{
this.appSharedPrefs = context.getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE);
this.prefsEditor = appSharedPrefs.edit();
}
public boolean getAnything() {
return appSharedPrefs.getBoolean("Anything", false);
}
public void setAnything(Boolean text) {
prefsEditor.putBoolean("Anything", text);
prefsEditor.commit();
}
然后从主要活动:
public class MainActivity extends Activity {
protected AppPreferences appPrefs;
appPrefs = new AppPreferences(getApplicationContext());
appPrefs.setAnything(fasle);
然后来自服务:
appPrefs = new AppPreferences(getApplicationContext());
当发生这种情况时,所有早期的更改都会重置,如何使服务和MainActivity使用相同的prefs?也许我可以以某种方式使AppPrefs类静态?
答案 0 :(得分:1)
在android中使用静态类字段被认为是一种不好的做法。 您的应用程序的资源可能会被操作系统撤销,并且每当用户返回时,您的应用程序的另一个进程可能会重新初始化。在这种情况下,您将松开doesCounter更新。我不知道是否是这种情况(它应该适用于您的应用程序具有前瞻性的常见情况,除非您在另一个进程中运行您的服务(使用标记isolatedProcess)
实现你想要做的“android方式”的最简单方法是将didCounter存储在SharedPreferences中。
实现这一目标的一种方法是使用这样的静态类:
public class PrefUtils {
private final static String NUM_DOES = "NumDoes";
public static int getNumDoes(Context c)
{
int mode = Activity.MODE_PRIVATE;
SharedPreferences mySharedPreferences = c.getSharedPreferences(PREF_NAME, mode);
return mySharedPreferences.getInt(NUM_DOES, 0);
}
public static void setNumDoes(int numDoes , Context c)
{
int mode = Activity.MODE_PRIVATE;
SharedPreferences mySharedPreferences = c.getSharedPreferences(PREF_NAME, mode);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putInt(NUM_DOES, numDoes);
editor.commit();
}
你完成了。只需调用PrefUtils.getNumDoes / setNumDoes
即可