0

我有一个Android应用程序,它依赖于很多后台服务。我在服务中通过JNI从C++获取一些值,并将这些值设置为一些静态变量。静态变量设置为删除Android应用程序的默认值

据我的理解,即使应用程序被删除,因为服务始终保持在后台,所以值应该保留在这些变量中。但不知何故,当应用程序被删除或杀死,静态变量重置为默认值,而不是有新的分配值。

任何机构都可以解释Android中后台服务中静态变量的行为。谢谢。这里是代码

public class ServiceData extends Service{ 
    public static void setUser_id(int id) { 
    user_id = id; 
} 

public static void setUserData_id(int id) { 
user_data_id = id; 
} 

protected static int user_id = -1; 
protected static int user_data_id = -1; 


@Override public void onCreate() { 

    super.onCreate(); 

context = getApplicationContext(); 

running = true; 
Log.d(TAG, "in onCreate"); 
Toast.makeText(context,"in onCreate", Toast.LENGTH_SHORT).show(); 
} 

@Override public int onStartCommand(Intent intent, int flags, int startId) { 
Log.d(TAG, "in onStartCommand"); 
Toast.makeText(context,"in onStartCommand", Toast.LENGTH_SHORT).show(); 
return START_STICKY; 
} 

@Override public IBinder onBind(Intent intent) { 
Log.d(TAG, "in onBind"); 
Toast.makeText(context,"in onBind", Toast.LENGTH_SHORT).show(); 
    return messenger.getBinder(); 
} 

@Override public boolean onUnbind(Intent intent) { 
Log.d(TAG, "in onUnbind"); 
Toast.makeText(context,"in onUnBind", Toast.LENGTH_SHORT).show(); 
    return super.onUnbind(intent); 

//return true; 
} 

@Override public void onRebind(Intent intent) { 
Log.d(TAG, "in onRebind"); 
Toast.makeText(context,"in onRebind", Toast.LENGTH_SHORT).show(); 
    super.onRebind(intent); 
} 

@Override public void onDestroy() { 

    super.onDestroy(); 
Log.d(TAG, "in onDestrory"); 
Toast.makeText(context,"in onDestroy", Toast.LENGTH_SHORT).show(); 

    this.manager.cancel(R.string.service_started); 

    running = false; 
} 
+0

您应该使用SharedPreferences而不是静态变量。 –

+0

是的,但我不想使用sharedPreference ...我想这也应该工作... –

+0

是的,但有些时候应用程序崩溃的静态变量设置为默认值。 –

回答

0

我认为Android的用户强行杀死特定应用程序的所有服务,也杀死了。如果你要的值存储在整个应用程序,你可以在Android上使用共享偏好。

+0

即使用户杀死应用程序,服务仍然存在..在我的情况下,服务始终是时间..只有问题是存储在静态值中的值 –

0

静态变量被称为类变量,它们是在类被卸载时加载和卸载时加载的范围。当应用程序被删除时,它们将不可用。而不是使用静态变量,请使用Shared Preferences

0

您可以设置静态变量的唯一时间是在其父类构造函数中。你确定他们被定义为静态吗?显示一些代码。

+0

我添加了代码..in user_id,user_data_id在我删除应用程序时获取-1,这是我的服务 –

+0

如果onDestroy被调用,那么无论如何你都会失去对这些变量的引用。看看应用程序类https://developer.android.com/reference/android/app/Application.html简单的答案是使用共享前缀虽然,只是加载他们onCreate并将它们设置为非静态变量 – Brian

+0

我检查了吐司这onDestroy没有被调用,我正在使用START_STICKY不允许调用onDestory() –

相关问题