안녕하세요..
안드로이드 초보 개발자입니다. 다름이 아니라
제가 탭바를 기본으로하고 그안에서 여러 listview를 관리하는 activity들을 각각 intent로 생성하고 보여주는 방식으로하고있습니다.
그런데 문제는 앱을 실행후 홈으로 나갔다가 다시 들어오면 정상적인데요
홈으로 나갔다가 백그라운드 어플 강제종료(갤럭시에있는)시키고 다시 앱을 실행하면 다음과 같은 에러를 나타면서 죽더라구요..
다른 앱들은 어떤가했는데 정상적으로 마지막보던 페이지에서 재로딩을 하면서 복구하더라구요..
어떤차이인지 궁금합니다. 혹시 각각의 Activity에서 onSaveInstanceState 를 이용한 처리를 반드시 해야하나요?..
아니면 탭바액티비티에서 모든 activity를 저장해놔야하나요?;
아.. 한가지 원인을 생각한것이 앱에서 전역변수를 관리하는데요 Application을 상속받은 클래스를 하나두고 그거로
관리하고있는데요.. 혹시 이게 문제가되나요?
12-04 12:10:00.905: E/AndroidRuntime(22332): FATAL EXCEPTION: main
12-04 12:10:00.905: E/AndroidRuntime(22332): java.lang.RuntimeException: Unable to start activity ComponentInfo{com..../com.....TabMain}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com..../com.....FeedActivity}: java.lang.NullPointerException
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread.access$700(ActivityThread.java:140)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.os.Looper.loop(Looper.java:137)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread.main(ActivityThread.java:4943)
12-04 12:10:00.905: E/AndroidRuntime(22332): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 12:10:00.905: E/AndroidRuntime(22332): at java.lang.reflect.Method.invoke(Method.java:511)
12-04 12:10:00.905: E/AndroidRuntime(22332): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
12-04 12:10:00.905: E/AndroidRuntime(22332): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
12-04 12:10:00.905: E/AndroidRuntime(22332): at dalvik.system.NativeStart.main(Native Method)
12-04 12:10:00.905: E/AndroidRuntime(22332): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com..../com......FeedActivity}: java.lang.NullPointerException
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1951)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:705)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.widget.TabHost.setCurrentTab(TabHost.java:369)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.widget.TabHost.addTab(TabHost.java:247)
12-04 12:10:00.905: E/AndroidRuntime(22332): at com.makamoye.victorysolo.TabMain.onCreate(TabMain.java:34)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.Activity.performCreate(Activity.java:5191)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
12-04 12:10:00.905: E/AndroidRuntime(22332): ... 11 more
12-04 12:10:00.905: E/AndroidRuntime(22332): Caused by: java.lang.NullPointerException
12-04 12:10:00.905: E/AndroidRuntime(22332): at com......FeedActivity.onCreate(FeedActivity.java:109)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.Activity.performCreate(Activity.java:5191)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
12-04 12:10:00.905: E/AndroidRuntime(22332): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
12-04 12:10:00.905: E/AndroidRuntime(22332): ... 21 more
고또님 답변감사합니다..
제가 원하는거는 탭바에서 마지막으로 보고있던 탭의 액티비티를 다시 불러오는건데요.. 이건 어떻게 가능한가요? 메모리를 강제로 정리하면 탭바도 onDestory이벤트가 발생해버리더군요..
예를들면 카카오톡에서처럼 제가 특정 대화방에 있다가 백그라운드 메모리 정리를 시키고 다시 카톡을 실행하면 마지막 대화방을 다시 읽어오더군요.. 이런건 어떻게 기억하는건지 궁금합니다..
단순히 홈버튼만 눌렀다가 다시실행하면 리로드 안하고.. 메모리 정리를 한후 실행하면 로드하도록 할수있는방법이있나요?
강제종료하면 메모리가 정리당합니다.
거의 모든 변수가 다 날아가기 때문에
onResume등에서 화면에 보이는 내용이 없으면 데이터를 다시 받아다가 갱신시키던지
그게 안되면 재시작을 시키는 등의 처리를 하는 것을 추천합니다.