0

배경 서비스에 많이 의존하는 Android 앱이 있습니다. 서비스에서 JNI를 통해 C++에서 값을 가져오고 그 값을 일부 정적 변수로 설정합니다.Android 앱 제거시 static 변수가 기본값으로 설정

서비스가 백그라운드에서 항상 켜져 있기 때문에 App이 제거 되더라도 값은 해당 변수에 보관되어야합니다. 그러나 어쨌든 앱이 제거되거나 종료되면 정적 변수는 새로운 할당 된 값을 갖는 대신 기본값으로 재설정됩니다.

Android에서 백그라운드 서비스의 정적 변수 동작을 설명 할 수 있습니까? 감사. 여기 당신이 안드로이드에서 공유 설정을 사용할 수있는 응용 프로그램을 통해 값을 저장할 .if 사용자가 강제로 응용 프로그램 특정 응용 프로그램의 모든 서비스도 사망 죽일 때 안드로이드에서 생각 코드

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

입니다.

+0

사용자가 앱을 죽인다고해도 서비스가 계속 켜져 있습니다. 내 경우에는 서비스가 항상 작동합니다 ... 유일한 문제는 정적 값에 저장된 값입니다. –

0

정적 변수를 클래스 변수라고하며 클래스가로드 될 때 클래스가로드 및 언로드 될 때로드됩니다. 앱을 삭제하면 사용할 수 없습니다. 정적 변수를 사용하는 대신 Shared Preferences

0

정적 변수를 설정할 수있는 유일한 시간은 상위 클래스 생성자입니다. 정적이라고 정의되어 있습니까? 몇 가지 코드를 보여줍니다.

+0

코드를 추가했습니다. user_id를 추가하고 app_and_id를 -1로 설정하면 그것은 내 sevice입니다 –

+0

onDestroy가 호출되고 있다면 그 변수에 관계없이 관계를 잃을 것입니다. https://developer.android.com/reference/android/app/Application.html 응용 프로그램 클래스를 살펴보십시오. 간단한 대답은 공유 설정을 사용하는 것입니다. onCreate를로드하고 비 정적 변수로 설정합니다. – Brian

+0

Toast로 확인했습니다. 이 onDestroy가 호출되지 않고 onDestory()를 호출 할 수없는 START_STICKY를 사용하고 있습니다. –

관련 문제