다시 시작할 때 Android 앱 충돌

일상 앱

http://developer.android.com/guide/topics/resources/runtime-changes.html 에서 가이드 라인을 충실히 따랐습니다 . RetainedFragment를 사용하여 구성 변경을 처리하는 것이 얼마나 쉬운 지 알고 놀랐습니다. 모든 것이 정상적인 이벤트 흐름에서 제대로 작동합니다. 그러나 결함이 있습니다. 나는 경우 최소화 응용 프로그램을하고 다음과 충돌 오랜 시간 후에 시작 :

E/AndroidRuntime( 5734): FATAL EXCEPTION: main^M                                                                               E/AndroidRuntime( 5734): Process: net.citibuzz.app.scool, PID: 5734^M                                                
E/AndroidRuntime( 5734): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.citibuzz.app.scool/net.citibuzz.app.scool.MapActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment net.citibuzz.app.scool.RetainedFragment: make sure class name exists, is public, and has an empty constructor that is public^M
E/AndroidRuntime( 5734):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)^M      
E/AndroidRuntime( 5734):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)^M       
E/AndroidRuntime( 5734):        at android.app.ActivityThread.access$800(ActivityThread.java:139)^M                  
E/AndroidRuntime( 5734):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)^M            
E/AndroidRuntime( 5734):        at android.os.Handler.dispatchMessage(Handler.java:102)^M                            
E/AndroidRuntime( 5734):        at android.os.Looper.loop(Looper.java:136)^M                                         
E/AndroidRuntime( 5734):        at android.app.ActivityThread.main(ActivityThread.java:5102)^M                       
E/AndroidRuntime( 5734):        at java.lang.reflect.Method.invokeNative(Native Method)^M                            
E/AndroidRuntime( 5734):        at java.lang.reflect.Method.invoke(Method.java:515)^M                                
E/AndroidRuntime( 5734):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)^M         
E/AndroidRuntime( 5734):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)^M                    
E/AndroidRuntime( 5734):        at dalvik.system.NativeStart.main(Native Method)^M                                       
E/AndroidRuntime( 5734): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment net.citibuzz.app.scool.RetainedFragment: make sure class name exists, is public, and has an empty constructor that is public^M
E/AndroidRuntime( 5734):        at android.support.v4.app.Fragment.instantiate(Fragment.java:413)^M                  
E/AndroidRuntime( 5734):        at android.support.v4.app.FragmentState.instantiate(Fragment.java:97)^M               
E/AndroidRuntime( 5734):        at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1790)^M
E/AndroidRuntime( 5734):        at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:213)^M     
E/AndroidRuntime( 5734):        at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:97)^M    
E/AndroidRuntime( 5734):        at net.citibuzz.app.scool.MapActivity.onCreate(MapActivity.java:134)^M               
E/AndroidRuntime( 5734):        at android.app.Activity.performCreate(Activity.java:5248)^M                          
E/AndroidRuntime( 5734):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)^M     
E/AndroidRuntime( 5734):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)^M      
E/AndroidRuntime( 5734):        ... 11 more^M                                                                            
E/AndroidRuntime( 5734): Caused by: java.lang.InstantiationException: can't instantiate class net.citibuzz.app.scool.RetainedFragment; no empty constructor^M 
E/AndroidRuntime( 5734):        at java.lang.Class.newInstanceImpl(Native Method)^M                                  
E/AndroidRuntime( 5734):        at java.lang.Class.newInstance(Class.java:1208)^M                                    
E/AndroidRuntime( 5734):        at android.support.v4.app.Fragment.instantiate(Fragment.java:402)^M                  
E/AndroidRuntime( 5734):        ... 19 more^M     

분명히 시스템에 리소스가 부족하고 활동 인스턴스를 종료 한 다음 다시 시작할 때 다시 만들려고했습니다. 이것은 나에게 약간 혼란 스럽습니다. 시스템이 두 가지 경우를 다르게 처리하는 것 같습니다. 하나는 구성 변경으로 인해 활동을 파괴하는 경우와 다른 하나는 리소스 경색으로 인해 파괴하는 경우입니다. 나는 이것이 일반적인 문제라고 생각합니다. 어떻게 처리합니까?

필요한 경우 코드 스 니펫을 제공하게되어 기쁩니다.하지만 처음에 말했듯이 Google의 샘플 코드를 따라 T.

편집 : 좋아, 나는 내 자신의 일부를 변경했다는 것을 알고 있습니다. 생성자를 추가했습니다 :-(

public class RetainedFragment extends Fragment {

    // data object we want to retain
    private MapState data;
    private Context mContext;

    public RetainedFragment(Context context) {
        mContext = context;
    }

    // this method is only called once for this fragment
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // retain this fragment
        setRetainInstance(true);
    }

    public void setData(MapState data) {
        this.data = data;
    }

    public MapState getData() {
        return data;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

    }

    ...
}
Rod_Algonquin
Caused by: java.lang.InstantiationException: can't instantiate class net.citibuzz.app.scool.RetainedFragment;

빈 생성자를 호출해야하는 프래그먼트 내에 사용자 정의 생성자를 가질 수 없습니다. 정의되지 않은 경우 해당 예외가 나타납니다.

여기에 대한 문서 가 있습니다.

Fragment의 모든 하위 클래스에는 공용 빈 생성자가 포함되어야합니다.
프레임 워크는 특히 상태 복원 중에 필요할 때 조각 클래스를 다시 인스턴스화하며 인스턴스화하기 위해이 생성자를 찾을 수 있어야합니다. 빈 생성자를 사용할 수없는 경우 상태 복원 중에 일부 경우 런타임 예외가 발생합니다.

그런데 getActivity();활동의 컨텍스트를 호출 하기 위해 호출하여 프래그먼트에서 컨텍스트에 대한 참조를 호출 할 수 있습니다.

조각을 인스턴스화하려면 새로 만든 조각의 참조를 반환하는 정적 메서드를 만들어야합니다.

public static RetainedFragment newInstance(int index) {
    RetainedFragment f = new RetainedFragment();

    // Supply index input as an argument.
    Bundle args = new Bundle();
    args.putInt("index", index);
    f.setArguments(args);

    return f;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

시작시 Android 앱 충돌

분류에서Dev

시작시 Android 앱 충돌

분류에서Dev

시작시 Android 앱 충돌

분류에서Dev

시작시 Android 앱 충돌

분류에서Dev

Pyinstaller로 시작할 때 Kivy 앱 충돌

분류에서Dev

새로운 의도를 시작할 때 Android 앱이 충돌합니다

분류에서Dev

때때로 시작시 Android 앱이 충돌 함

분류에서Dev

내 Xamarin.Android 앱이 때때로 시작시 충돌 함

분류에서Dev

활동을 다시 시작할 때 앱 충돌

분류에서Dev

주요 활동을 시작할 때 앱이 충돌합니다.

분류에서Dev

다시 열 때 앱 충돌 (ImmutableMap)

분류에서Dev

Eclipse-시작시 Android 앱 충돌?

분류에서Dev

scheduleAtFixedRate 내에서 활동을 시작할 때 앱이 충돌 함

분류에서Dev

SharedPreferences.contains ()를 사용할 때 Android 앱이 충돌합니다.

분류에서Dev

새로운 인 텐트를 시작할 때 내 앱이 충돌합니다.

분류에서Dev

충돌 후 Android 자동으로 앱 다시 시작 중지

분류에서Dev

다시 시작할 때 Android 사용자 지정 카메라 충돌

분류에서Dev

일시 중지시 Android 앱 충돌

분류에서Dev

Android Studio로 작성할 때 bootcamp 책의 Android 앱이 충돌 함

분류에서Dev

시작시 앱 충돌

분류에서Dev

시작시 앱 충돌

분류에서Dev

onclick시 앱 충돌

분류에서Dev

Android-사진 저장시 앱 충돌

분류에서Dev

버튼 클릭시 Android 앱 충돌

분류에서Dev

앱 충돌 후 Apple 시작

분류에서Dev

최종 의도로 활동을 시작할 때 앱이 충돌 함

분류에서Dev

startActivityForResult를 시작할 때 앱 충돌을 일으키는 CAMARA_REQUEST

분류에서Dev

SensorManager.registerListener를 등록 할 때 내 Android 앱이 충돌합니다.

분류에서Dev

시작 후 Xamarin Forms Android 앱이 충돌 함 (시작)

Related 관련 기사

뜨겁다태그

보관