I used this sample code in a similar clock application:
http://about-android.blogspot.in/2010/04/create-apps-to-show-digital-time-in_19.html
It works fine, however when using the back or home buttons I get a nullpointerexception in the log. It says unable to stop application.
If I remove the methods :
timer.cancel();
timer.purge();
timer = null;
It works OK, but I suppose this would be memory consuming?
/M
08-19 19:00:13.438: E/AndroidRuntime(1064): FATAL EXCEPTION: main
08-19 19:00:13.438: E/AndroidRuntime(1064): java.lang.RuntimeException: Unable to stop activity {se.macke.binarycounter/se.macke.binarycounter.MainActivity}: java.lang.NullPointerException
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2624)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2690)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.app.ActivityThread.access$2100(ActivityThread.java:117)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:964)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.os.Handler.dispatchMessage(Handler.java:99)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.os.Looper.loop(Looper.java:123)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-19 19:00:13.438: E/AndroidRuntime(1064): at java.lang.reflect.Method.invokeNative(Native Method)
08-19 19:00:13.438: E/AndroidRuntime(1064): at java.lang.reflect.Method.invoke(Method.java:507)
08-19 19:00:13.438: E/AndroidRuntime(1064): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-19 19:00:13.438: E/AndroidRuntime(1064): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-19 19:00:13.438: E/AndroidRuntime(1064): at dalvik.system.NativeStart.main(Native Method)
08-19 19:00:13.438: E/AndroidRuntime(1064): Caused by: java.lang.NullPointerException
08-19 19:00:13.438: E/AndroidRuntime(1064): at se.macke.binarycounter.MainActivity.onStop(MainActivity.java:209)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1170)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.app.Activity.performStop(Activity.java:3873)
08-19 19:00:13.438: E/AndroidRuntime(1064): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2619)
08-19 19:00:13.438: E/AndroidRuntime(1064): … 11 more
08-19 19:00:16.398: I/Process(1064): Sending signal. PID: 1064 SIG: 9
08-19 19:00:16.450: I/ActivityManager(61): Process se.macke.binarycounter (pid 1064) has died.
08-19 19:00:16.450: E/InputDispatcher(61): channel ‘4079da00 se.macke.binarycounter/se.macke.binarycounter.MainActivity (server)’ ~ Consumer closed input channel or an error occurred. events=0x8
08-19 19:00:16.450: E/InputDispatcher(61): channel ‘4079da00 se.macke.binarycounter/se.macke.binarycounter.MainActivity (server)’ ~ Channel is unrecoverably broken and will be disposed!
The visible lifetime of an
Activityis betweenonStart()andonStop(). By setting your timer tonulland then using the back button or the home button and accessing the application again doesn’t ensure that theActivityhad terminated, it simply wasn’t visible anymore. So you end up accessing something that is pointing tonulland hence theNPE.