android+版本升级的时候会清楚数据马,android主进程销毁了,线程会不会也销毁?...
Android Activity 銷毀后子線程會不會被GC回收
曾想當然地認為頁面被finish之后線程會被android 虛擬機的垃圾回收機制回收掉。
于是用頁面跳轉做測試
測試代碼
結果有點意外,頁面被銷毀后定時器依然在執行。退出應用定時器還在執行。
UI線程被結束掉,UI線程里面的子線程并沒有被GC
問題來了,應該如何主動銷毀呢
1、通過線程
Hanlder是線程與Activity通信的橋梁,利用handler接收到任務線程,放到任務隊列里面派對執行。//調用該任務線程的run() 方法執行任務線程。Handler updateBarHandler =new handler();handler.post(Runnable Thread);//移除handler里的任務線程,調用線程的stop()方法,銷毀線程。handler.removecallbacks(Runnable Thread);
2、通過Timer
通過以下四種方法終止一個timer線程:
a)調用timer的cancle方法。可以從程序的任何地方調用此方法,甚至在一個timer task的run方法里;
b)讓timer線程成為一個daemon線程(可以在創建timer時使用new Timer(true)達到這個目地),這樣當程序只有daemon線程的時候,它就會自動終止運行;
c)當timer相關的所有task執行完畢以后,刪除所有此timer對象的引用(置成null),這樣timer線程也會終止;
d)調用System.exit方法,使整個程序(所有線程)終止。 Android基于Linux內核開發,其進程調度相關方面和Linux保持一致。主進程銷毀后,其中的線程會被內核執行銷毀流程,并回收資源,但是子進程并不會。因為線程使用的是主進程進程空間,進程空間銷毀意味著線程隨之銷毀;子進程擁有獨立進程空間,如果銷毀父進程,子進程會被初始進程接管成為繼父進程。
發表評論
總結
以上是生活随笔為你收集整理的android+版本升级的时候会清楚数据马,android主进程销毁了,线程会不会也销毁?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云测试软件详解,软件测试之登录测试详解
- 下一篇: Python学习笔记(5):Python