• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android handler 详解(面试百分之100问到),androidhandler

Android handler 详解(面试百分之100问到),androidhandler

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android handler详解,android handler,android handler用法,android handler机制,android handler传值等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android handler 详解(面试百分之100问到),androidhandler


handler在Android中被称为“消息处理者”,在多线程中比较常用。

handler内部实现原理


 

handler实现机制:
1,Message对象,表示要传递的一个消息,内部使用链表数据结构实现一个消息池,用于重复利用,
避免大量创建消息对象,造成内存浪费
2,MessageQueue对象,存放消息对象的消息队列,先进先出原则
3,Looper对象负责管理当前线程的消息队列
4,handler对象负责把消息push到消息队列中,以及接收Looper从消息队列中取出的消息


 

handler的内存泄露问题(activity已经退出,而handler没有退出,这样就可能导致内存泄露)
1,定义一个内部类时,会默认拥有外部类对象的引用,所以建议使用内部类时,最好定义一个静态内部类
2,引用的强弱:强引用→软引用→弱引用


 

下面用获取网络图片代码说明一下handler基本使用

package com.example.uri;

import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;

/**
 * 
 * 访问网络的操作,必须放在工作线程中完成
 *
 */
public class MainActivity extends Activity {

    private static final int LOADSUCCESS=0x1;
    private static ImageView iv;
    private final myhandler handler=new myhandler(this);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv=(ImageView) findViewById(R.id.imageView1);
    }

    private static class myhandler extends Handler{
        
        private final WeakReference<MainActivity> weakReference;
        public myhandler(MainActivity mainActivity){
            weakReference=new WeakReference<MainActivity>(mainActivity);
        }
        
        public void handleMessage(Message msg) {
            MainActivity mainActivity=weakReference.get();
            if(mainActivity!=null){
                switch (msg.what) {
                case LOADSUCCESS:
                    MainActivity.iv.setImageBitmap((Bitmap) msg.obj);
                    break;

                }
            }
        }
    }
    public void geturl(View v){
        /*Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
        startActivity(intent);  */
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                try {
                    URL url=new URL("http://img2.3lian.com/img2007/10/28/123.jpg");
                    InputStream in=url.openStream();
                    Bitmap bitmap=BitmapFactory.decodeStream(in);
                    Message message= handler.obtainMessage(LOADSUCCESS, bitmap);
                    handler.sendMessage(message);
                } catch (MalformedURLException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }
        }).start();
        
    }

}

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • android Handler介绍,androidhandler介绍
  • Android消息机制Handler解析(源码+Demo)
  • android handler传递消息机制,androidhandler
  • Android handler 详解(面试百分之100问到),androidhandler

相关文章

  • 2017-05-227.6.4 基于UDP协议的Socket通信
  • 2017-05-26Android Studio快捷键,androidstudio
  • 2017-05-26Linux常用命令-50:crontab命令
  • 2017-05-26android开发之——获取相册图片和路径,
  • 2017-05-26Android MeasuerSpce的由来及使用
  • 2017-05-26牛刀小试Oracle之ORACLE 11GR2 RAC安装配置--先决配置阶段
  • 2017-05-26自定义一个全屏的AlertDialog。,全屏alertdialog
  • 2017-05-26多线程中使用curl致coredump问题
  • 2017-05-26Android开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验
  • 2017-05-26Android逆向之旅---解析编译之后的Resource.arsc文件格式

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 2015年Android作品集
    • mongodb3.0.7生产环境扩容存储记录
    • Android新手入门2016(8)--ListView之ArrayAdapter
    • 【玖哥乱弹】Android初学路上会遇到的瓶颈
    • View的事件分发机制,View事件分发机制
    • Android学习笔记(30):选项卡TabHost浅析
    • Android 正则表达式验证手机号、姓名(包含少数民族)、身份证号,android正则表达式
    • Android阻止AlertDialog关闭,androidalertdialog
    • did not call through to super.onCreate(),didsuper.oncreate
    • 我的投资3--热门理财,投资3--热门理财

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有