0

나는 환경 설정 활동으로 라이브 벽지를 만들었습니다. 불행히도 사용자가 설정을 변경할 때마다 onSharedPreferenceChangeListener가 호출됩니다. 리스너는 다소 CPU를 많이 사용하는 루틴을 호출 (큰 메쉬를 다시 초기화)하여 기본 설정 활동을 느리게 만듭니다. 사용자가 환경 설정 활동을 종료 할 때만 리스너를 호출하려면 어떻게해야합니까? SharedPreferences.OnSharedPreferenceChangeListener라이브 배경 화면에서 환경 설정을 변경하는 올바른 방법은 무엇입니까?

나는 보통 단순히 내 Engine의 생성자 내에서 호출 할 수 있도록 내 Engine 클래스는 SharedPreferences.OnSharedPreferenceChangeListener 인터페이스를 구현해야 등록 다음

SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(context); 

:

답변

1

어쩌면 당신은 당신의 preferenceActivity에서 onPause 또는 onDestroy를 사용하여 큰 메쉬를 계산해야합니다. 어떤 속성에 대한 변경 사항을 다시 계산하려는 것 같습니다. 따라서 onPreferencesChanged에 플래그를 설정하고 활동이 닫히고 liveWallpaper-View로 돌아갈 때 수학을 수행하면됩니다.

또 다른 방법은 preferenceActivity가 정상적으로 작동하도록 병렬 스레드에서 계산을 시작하는 것입니다.

+0

그래 내가 그 일을 끝냈다. 그것이 "안드로이드"방식인지는 모르겠지만 작동하는 해결 방법입니다. –

1

SharedPreferences 객체의 인스턴스를 가져옵니다

mPrefs.registerOnSharedPreferenceChangeListener(this); 

onSharedPreferenceChanged(SharedPreferences prefs, String key) 메서드를 사용하여 Engine 클래스.

원하는 경우 OnSharedPreferenceChangeListener으로 작동하는 별도의 클래스를 구현할 수도 있습니다.

+0

아니요, 이미 그랬습니다. 문제는 onSharedPreferences()가 각 환경 설정 변경과 함께 반복적으로 호출된다는 것입니다. 선호도 활동이 끝나면 * 한 번 *이라고 말하고 싶습니다. –