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() –

相關問題