Android中Handler的使用

摘要:
当我们处理下载或其他需要长时间执行的任务时,如果我们直接将处理函数放入活动的OnCreate或OnStart中,整个活动在执行过程中不会响应。如果时间太长,程序将挂断。处理程序将这些函数放入单独的线程中执行,这不会影响活动。

当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉。Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响。

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class HandleActivity extends Activity {
    private ImageView imageView = null;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 0:
//你的操作
break; case 1:
//你的造作
break; } super.handleMessage(msg); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); thread.start(); } Thread thread = new Thread(new Runnable() { public void run() { Message message = new Message();

       message.what = 1;
       message.obj = obj;

       handler.sendMessage(message);

        }
    });

}


也可以直接写在一个方法内实现

private void getRealTimeBills(final String date)
{
  final Handler handler = new Handler()

  {
    @Override
    public void handleMessage(Message msg)

    {
      if(msg.what == 1)
      {
        realTimeBills = (RealTimeBills) msg.obj;
      }
    }
  };
  new Thread(){
  @Override
  public void run()

  {
    Message message = new Message();
    try

    {
      realTimeBills = context.getRealTimeBills(date);
      if(realTimeBills.getResultMessage().OK())
      {
        message.what = 1;
        message.obj = realTimeBills;
      }

    catch (Exception e)

    {
      e.printStackTrace();
    }
    handler.sendMessage(message);
   }
  }.start();
}

 

免责声明:文章转载自《Android中Handler的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇numpy中的数组之间进行集合运算Effective C++(6) 如何拒绝编译器的自动生成函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Handler处理长时间事件

当我们在处理一些比较长时间的事件时候,比如读取网络或者数据库的数据时候,就要用到Handler,有时候为了不影响用户操作应用的流畅还要开多一个线程来区别UI线程,在新的线程里面处理长时间的操作。开发的时候遇到数据处理都可以这样用handler,灵活修改一下就可以做各种效果了。 第一步:ProgressDialog弹出旋转框来提示长时间操作。 第二步:开多一...

ffmpeg使用ss与t参数对视频进行剪辑

ffmpeg能够实现对视频进行剪辑操作,ss为指定视频剪切开头的起始时间,t制定视频的总长度,ss与t的单位均为:秒。 ffmpeg -ss 7200 -i 1080p.mp4 -c copy -t 900 1080psrc.mp4 -ss 指定视频剪切起始时间为2:00:00 -i 指定视频源文件 -c原始编解码数据必须被拷贝,即剪辑前后文件的编码方式保...

关于springMVC

一 mvc设计模式 MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制器(controller) 的缩写, 是⼀种⽤于设计创建 Web 应⽤程序表现层的模式。 MVC 中每个部分各司其职:Model(模型):模型包含业务模型和数据模型,数据模型⽤于封装数据,业务模型⽤于处理业务。View(视图): 通...

Android View如何获取焦点

Android新启动Activity,dialog或者其他窗体中中包含EditText, 新启动的activity的焦点默认在EditText上,这是android系统会弹出软键盘,挤压activity本来的界面,影响美观。       因此最好在新窗体创建时,最好在onCreate()方法中将焦点放在另一个view上.  view使用requestFoc...

Golang Web入门(1):自顶向下理解Http服务器

摘要 由于Golang优秀的并发处理,很多公司使用Golang编写微服务。对于Golang来说,只需要短短几行代码就可以实现一个简单的Http服务器。加上Golang的协程,这个服务器可以拥有极高的性能。然而,正是因为代码过于简单,我们才应该去研究他的底层实现,做到会用,也知道为什么这么用。 在本文中,会以自顶向下的方式,从如何使用,到如何实现,一点点的分...

Vue3.x 推荐使用 mitt.js

Vue2.x 使用 EventBus 进行组件通信,而 Vue3.x 推荐使用 mitt.js。 比起 Vue 实例上的 EventBus,mitt.js 好在哪里呢?首先它足够小,仅有200bytes,其次支持全部事件的监听和批量移除,它还不依赖 Vue 实例,所以可以跨框架使用,React 或者 Vue,甚至 jQuery 项目都能使用同一套库。 快...