Kitoved
@Kitoved
новичек

Как остановить timer при закрытии Activity?

В onCreate создается таймер, который каждые 15 секунд запускает AsyncTask поток, после того как активити или все приложение закрывается, таймер все равно продолжает запускать этот поток. Если в onDestroy или по нажатию кнопки выполняется команда timer.cancel();, то активити выдает ошибку.
вот код таймера
в onCreate
Timer timer = new Timer();
	        MyTimerTask task = new MyTimerTask();
	        
	        timer.schedule(task,0, 15 * 1000);
	        }

TimerTask
class MyTimerTask extends TimerTask {
    	
        public void run() {
        	
        	 String streamUrl = "ссылка";
        	metadataTask =new MetadataTask();
	        try {
	            metadataTask.execute(new URL(streamUrl));
	        } catch (MalformedURLException e) {
	            e.printStackTrace();
	        }
                           	
             String title_artist;
			try {
				streamMeta.refreshMeta();
				title_artist = streamMeta.getStreamTitle();
				Log.i("ARTIST TITLE", title_artist);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
				
                       
        }
    }

в onDestroy делаю timer.cancel();
и при закрытии

12-31 19:09:04.220: E/AndroidRuntime(1816): FATAL EXCEPTION: main
12-31 19:09:04.220: E/AndroidRuntime(1816): java.lang.RuntimeException: Unable to destroy activity {com.example.kgw/com.example.kgw.TimerActivity}: java.lang.NullPointerException
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3499)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3517)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.app.ActivityThread.access$1200(ActivityThread.java:141)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.os.Handler.dispatchMessage(Handler.java:99)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.os.Looper.loop(Looper.java:137)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.app.ActivityThread.main(ActivityThread.java:5103)
12-31 19:09:04.220: E/AndroidRuntime(1816): at java.lang.reflect.Method.invokeNative(Native Method)
12-31 19:09:04.220: E/AndroidRuntime(1816): at java.lang.reflect.Method.invoke(Method.java:525)
12-31 19:09:04.220: E/AndroidRuntime(1816): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
12-31 19:09:04.220: E/AndroidRuntime(1816): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-31 19:09:04.220: E/AndroidRuntime(1816): at dalvik.system.NativeStart.main(Native Method)
12-31 19:09:04.220: E/AndroidRuntime(1816): Caused by: java.lang.NullPointerException
12-31 19:09:04.220: E/AndroidRuntime(1816): at com.example.kgw.TimerActivity.onDestroy(TimerActivity.java:313)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.app.Activity.performDestroy(Activity.java:5302)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1117)
12-31 19:09:04.220: E/AndroidRuntime(1816): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3486)
12-31 19:09:04.220: E/AndroidRuntime(1816): ... 11 more
  • Вопрос задан
  • 1124 просмотра
Решения вопроса 1
GavriKos
@GavriKos
У вас скорее всего переменная timer == null на момент уничтожения окна. Вы ее точно задаете глобально? Потому что вот в onCreate у вас похоже локальная переменная.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Neonoviiwolf
Flutter developer
посмотрите тут
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы