• Looper学习


    网上查看了好多关于looper,

    1.每个线程有且最多只能有一个Looper对象,它是一个ThreadLocal

    2.Looper内部有一个消息队列,loop()方法调用后线程开始不断从队列中取出消息执行,若没有消息就处于阻塞状态,android的主线程就是一个looper线程。

    3.Looper使一个线程变成Looper线程。

    简单的说,当程序调用Looper.prepare()后在中间可以初始化handler,一个looper线程可以有多个handler。当一个线程是looper线程时候,looper有一个消息队列,不停的读消息队列的消息然后执行,如果没有就处于阻塞状态,等有消息了就继续读消息然后执行。handler是处理looper中消息队列消息的。

    我自己总结并认为比较容易明白的描述是:
    在程序消息队列中排队的消息保持了对目标Handler类的应用。如果Handler是个内部类,那么它也会保持它所在的外部类(通常是Activity或者Service等)的引用。那么这时只要有消息在队列中,那么Handler便无法被回收,如果Handler不是static那么使用Handler的Service和Activity就也无法被回收,这就可能导致内存泄露。那么什么情况下会发生泄漏?通常只有在你发送了一个延时很长的消息的时候才可能会发生。

    public class MainActivity extends Activity {
    
    	private  Handler handler;
    	private boolean flag=true;
        @Override
        protected void onCreate (Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            Thread lo=new Mythread();
            lo.start();
            while(true)
            {
            	if(!flag){
            	Message msg=new Message();
            	msg.what=3;
            	try {
    				Thread.sleep(2000);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
            	handler.sendEmptyMessageDelayed(msg.what, 2000);
            }
            }
          
            
            }
    
        class Mythread extends Thread
        {
    		@Override
    		public void run() {
    			{
    				
    				Looper.prepare();
    				handler=new Handler(){
    					@Override
    					public void handleMessage(Message msg) {
    						int c=msg.what;
    						System.out.println(c);
    						super.handleMessage(msg);
    					}
    					};
    				flag=false;
    				Looper.loop();
    			
    			}
    		}
        }
    }
    

      

  • 相关阅读:
    General error: 1364 Field 'id' doesn't have a default value
    数据库 主键、外键和索引的区别
    宝塔升级
    服务器数据库性能调优
    关于TP5.1的跳转
    用PHP写九九乘法表
    Java中的接口
    Java中的继承
    超市库存管理系统
    Java中的封装
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4787678.html
Copyright © 2020-2023  润新知