2012-02-02 5 views
1

파편을 포함하는 활동 (예 : MyActivity)이 있으며 조각 변경을 위해 fragmentTransaction.replace (XX, YY)를 사용하고 있습니다. 응용 프로그램이 다시 시작될 때 비활성 기간이 지나면 비정상적으로 작동하고 다음 예외가 생깁니다 (그동안 활동이 중단되었는지 또는 어떤 일이 일어 났는지는 알 수 없습니다).비활성 상태에서 이상하게 반응하는 응용 프로그램

"java.lang.RuntimeException: Unable to start activity ComponentInfo{com.platinumapps.facedroid/com.platinumapps.facedroid.facedroid}: java.lang.NullPointerException 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831) 
    at android.app.ActivityThread.access$500(ActivityThread.java:122) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:132) 
    at android.app.ActivityThread.main(ActivityThread.java:4123) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:491) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at com.platinumapps.facedroid.MyFragment.<init>(MyFragment.java:90) 
    at java.lang.Class.newInstanceImpl(Native Method) 
    at java.lang.Class.newInstance(Class.java:1301) 
    at android.app.Fragment.instantiate(Fragment.java:560) 
    at android.app.FragmentState.instantiate(Fragment.java:96) 
    at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1589) 
    at android.app.Activity.onCreate(Activity.java:854) 
    at com.platinumapps.facedroid.facedroid.onCreate(facedroid.java:78) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779) 
    ... 11 more 
java.lang.NullPointerException 
    at com.platinumapps.facedroid.MyFragment.<init>(MyFragment.java:90) 
    at java.lang.Class.newInstanceImpl(Native Method) 
    at java.lang.Class.newInstance(Class.java:1301) 
    at android.app.Fragment.instantiate(Fragment.java:560) 
    at android.app.FragmentState.instantiate(Fragment.java:96) 
    at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1589) 
    at android.app.Activity.onCreate(Activity.java:854) 
    at com.platinumapps.facedroid.facedroid.onCreate(facedroid.java:78) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831) 
    at android.app.ActivityThread.access$500(ActivityThread.java:122) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:132) 
    at android.app.ActivityThread.main(ActivityThread.java:4123) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:491) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
    at dalvik.system.NativeStart.main(Native Method) 

그것에 대한 제안은 많은 도움이 될 것입니다. 고마워

+0

내가 노력하고 MyFragment.java:90에서 : 그냥 질문을 follw는 stackflow에서 150 + 더 안타 메인 (그 부모) 활동의 문맥을 사용하여 sharedpreference를 얻는다. – fdmirza

답변

3

이런 일이 발생하면 메모리가 필요하기 때문에 전체 응용 프로그램이 시스템에 의해 닫히고 시스템이 onCreate을 다시 호출해야하기 때문입니다.

Android는 이전 상태를 복원하는 것이 가장 좋으며 활동 스택에서 마지막 활동을 열려고 시도합니다.

다른 활동 (을 사용할 때 Bundle에 의해)으로 전달되는 값이 null 일 수 있습니다.

봅니다 ... 다른 Activity에서 전달하고 무결성 (당신이 조건 if(value!=null)이 있는지 확인은)의에 대한 확인되지 않은 값이없는 것을 확인합니다

편집

onLowMemory()을 무시하고 공유 환경 설정에 일부 항목을 저장하고 활동이로드 될 때로드 할 수도 있습니다. 공유 환경 설정에 대한 자세한위한

import android.preference.PreferenceManager; 
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
// then you use 
prefs.getBoolean("keystring", true); 

:

+0

답장을 보내 주셔서 감사합니다. OS가 그 actoivity를 죽이지 않는다는 것을 확실히 할 수 있습니까? – fdmirza

+0

네 절대적으로 .. – OnkarDhane

+0

아니요, 불행히도, 당신은 할 수 없습니다. – Rotemmiz

0

null 포인터 예외, 당신이 기능을 대체 (XX, YY) .put 중단 점 디버거와 함께 당신이 도전적으로 솔루션을 얻을 것이다 통과 확인 값을 확인하십시오. androidmanifest.xml에 액티비티를 activity.and를 시작할 수없는 사운드로 등록했는지 확인하십시오. 애플리케이션이이 체크에 맞춰 응답하지 않는 경우 중요한 점은 Response time 당신에게 도움이 될 것입니다.

+0

답장을 보내 주셔서 감사합니다. 응용 프로그램이 백그라운드에 있고 몇 시간 동안 작동하지 않으면 오류가 발생합니다. 응용 프로그램을 시작할 때 모두 완벽합니다. 나는 OS에서 죽은 것처럼 보입니다 ... ( – fdmirza

+0

DDMS에서의 활동에 오신 것을 환영합니다. 당신은 그것을 얻을 것입니다. 당신의 어플리케이션 실행 시간이나 응답 시간을 줄이십시오. 당신의 code.just와 probs가 없습니다 시간 복잡성을 모두 줄일 수 있습니다 ... 그것은 잘 작동합니다 .. :) – OnkarDhane

관련 문제