• Android学习 销毁activity时注意关闭线程


    在Activity开启的子线程并不会自动随Activity的destroy而关闭,所以必须手动去关闭子线程或者通过boolean的方式让子线程结束运行。开启的子线程有for循环的要更加注意。

     1 package com.lsw; 
     2 
     3 import android.app.Activity;  
     4 import android.os.Bundle;  
     5 import android.os.Handler;  
     6 import android.os.Message;
     7 import android.util.Log;  
     8 public class ThreadDemoActivity extends Activity {  
     9     private static final String TAG = "ThreadDemo";  
    10     private int count = 0;  
    11     private Handler mHandler =  new MyHandler();  
    12     boolean stopThread=false;
    13       
    14     private Runnable mRunnable = new Runnable() {
    15           
    16         public void run() {
    17             
    18             while (!stopThread)
    19             {
    20                 count++;  
    21                 try
    22                 {
    23                     Thread.sleep(2000);
    24                 }
    25                 catch (InterruptedException e)
    26                 {
    27                     // TODO Auto-generated catch block
    28                     e.printStackTrace();
    29                 }
    30                 
    31                 //虽然Message的构造函数是public的,但是最好是使用Message.obtain( )或Handler.obtainMessage( )函数来获取Message对象,因为Message的实现中包含了回收再利用的机制,可以提供效率。
    32                 Message message=mHandler.obtainMessage();
    33                 message.what=0;
    34                 message.obj=count;
    35                 mHandler.sendMessage(message);
    36             }
    37         }  
    38     };  
    39     
    40     @Override  
    41     public void onCreate(Bundle savedInstanceState) {  
    42         super.onCreate(savedInstanceState);  
    43         setContentView(R.layout.main);   
    44         //开启子线程
    45         new Thread(mRunnable).start();
    46     }  
    47      
    48     protected void onDestroy() {
    49         System.out.println("-----------onDestroy------");
    50         stopThread=true;
    51         super.onDestroy();
    52     };   
    53     
    54     class MyHandler extends Handler{
    55         
    56         @Override
    57         public void handleMessage(Message msg)
    58         {
    59         // TODO Auto-generated method stub
    60             Log.e(TAG, Thread.currentThread().getName() + " " +msg.obj);  
    61             setTitle("" +msg.obj);  
    62         }
    63     }
    64     
    65 }  
  • 相关阅读:
    开发工具字体推荐
    uniapp android 打包签名
    从零开始的简单集合幂级数
    年前做题记录总结
    Oracle 19c RAC 手工建库
    oracle 19c RAC srvctl start database 启动数据库报错
    AcWing周赛 40
    AcWing cup 2022春季
    springbootstarterparent的作用
    List经过stream操作再次聚合的List已经不是同一个对象
  • 原文地址:https://www.cnblogs.com/shuaiwen/p/3094768.html
Copyright © 2020-2023  润新知