我有一个非常奇怪的错误,我无法解决,因为它不会产生任何错误。在我的应用程序中,我有一个活动,根据从导航器中选择的项目调用不同的片段。这是所有事情发生的主要活动。以下是我的MapsActivity中的一些代码片段,我怀疑该错误可能与Sharedpreferences有关,我将JSON数组作为字符串存储在共享首选项中,是否会以某种方式导致错误?
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
public void setMapStyle() {
SharedPreferences sharedPreferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(this);
mShowCityNames = sharedPreferences.getBoolean(getString(R.string.settings_show_cities_key), false);
mShowCountryNames = sharedPreferences.getBoolean(getString(R.string.settings_show_countries_key), true);
String mapStyle = sharedPreferences.getString(getString(R.string.sp_mapstyle_key), "0");
JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(mapStyle);
} catch (JSONException e) {
e.printStackTrace();
}
jsonArray =setPreferenceValue(jsonArray, "administrative.country", mShowCountryNames);
jsonArray =setPreferenceValue(jsonArray, "administrative.locality", mShowCityNames );
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(getString(R.string.sp_mapstyle_key), jsonArray.toString());
editor.putBoolean(getString(R.string.settings_show_cities_key), mShowCityNames);
editor.putBoolean(getString(R.string.settings_show_countries_key), mShowCountryNames);
editor.apply();
}
private void setupSharedPreferences(){
SharedPreferences sharedPreferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals(getString(R.string.settings_show_countries_key) )){
setMapStyle();
} else if (key.equals(getString(R.string.settings_show_cities_key))){
setMapStyle();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
}
}
当我从具有startactivityforresult的其中一个片段开始一个新的Intent,或者从另一个调用图库意图的活动开始一个新的Intent时,这个主要活动就会消失,并且在意图完成之后我的应用程序就会崩溃"而我所看到的只是模拟器的主屏幕,应用程序仍然在后台。有人知道造成这种情况的原因是什么? 以下是从我的片段启动的Intent之一的示例,屏幕截图中的另一个意图是从另一个活动调用的:
Intent intent =
new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
.setFilter(filter)
.build(getActivity());
getActivity().startActivityForResult(intent, REQUEST_CODE_SEARCH_ACTIVITY);
似乎活动从后台堆栈中消失但它仍然在内存中,只是没有显示..而且最奇怪的是:当应用程序刚刚安装时,这根本不会发生,直到应用程序被销毁。之后,在每个应用程序启动时都会发生此错误,但我在日志中没有错误。这里发生了什么?代码在github上可见,这里有两个截图:
the activity in the background is visible after a fresh install even after launching a new intent
after destroying the app and launching it again, the activity from the background disappears