活动正在消失

时间:2018-03-05 23:28:15

标签: android android-intent android-activity fragment

我有一个非常奇怪的错误,我无法解决,因为它不会产生任何错误。在我的应用程序中,我有一个活动,根据从导航器中选择的项目调用不同的片段。这是所有事情发生的主要活动。以下是我的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

0 个答案:

没有答案