当前位置:  编程技术>移动开发
本页文章导读:
    ▪施用Handler的大致流程        使用Handler的大致流程   1、首先创建一个Handler对象,可以直接使用Handler无参构造函数创建Handler对象,也可以继承Handler类,重写handleMessage方法来创建Handler对象。  2、在监听器中,调用H.........
    ▪ sench touch的Cannot read property 'offsetBoundary' of undefined有关问题        sench touch的Cannot read property 'offsetBoundary' of undefined问题 在 Sencha Touch中,如果对一个Ext.form.Toggle的对象直接setValue,将会出现Cannot read property 'offsetBoundary' of undefined的错误,这算是一个bug,因为在.........
    ▪ handler运用之-线程队列与ui线程       handler使用之---线程队列与ui线程 这里Handler线程队列和ui主线程公用一共。Handler并没有真正的启动一个线程,而是直接调用run方法。 public class Test extends Activity implements OnClickListener {     @Overri.........

[1]施用Handler的大致流程
    来源: 互联网  发布时间: 2014-02-18
使用Handler的大致流程


  1、首先创建一个Handler对象,可以直接使用Handler无参构造函数创建Handler对象,也可以继承Handler类,重写handleMessage方法来创建Handler对象。

  2、在监听器中,调用Handler的post方法,将要执行的线程对象添加到线程队列当中。此时将会把该线程对象添加到handler对象的线程队列中。

  3、将要执行的操作写在线程对象的run方法中,一般是一个Runnable对象,复写其中的run方法就可以了。

  Handler包含了两个队列,其中一个是线程队列,另外一个是消息队列。使用post方法会将线程对象放到该handler的线程队列中,使用sendMessage(Message message)将消息放到消息队列中。

  如果想要这个流程一直执行的话,可以在run方法内部执行postDelayed或者post方法,再将该线程对象添加到消息队列中,重复执行。想要线程停止执行,调用Handler对象的removeCallbacks(Runnable r) 方法从线程队列中移除线程对象,使线程停止执行。

  Handler为Android提供了一种异步消息处理机制,当向消息队列中发送消息 (sendMessage)后就立即返回,而从消息队列中读取消息时会阻塞,其中从消息队列中读取消息时会执行Handler中的public void handleMessage(Message msg) 方法,因此在创建Handler时应该使用匿名内部类重写该方法,在该方法中写上读取到消息后的操作,使用Handler的 obtainMessage() 来获得消息对象。

  Handler与线程的关系:

  使用Handler的post方法将Runnable对象放到Handler的线程队列中后,该Runnable的执行其实并未单独开启线程,而是仍然在当前Activity线程中执行的,Handler只是调用了Runnable对象的run方法。

  Bundle是什么:

  Bundle是一个特殊的map,它是传递信息的工具,它的键只能是string类型,而且值也只能是常见的基本数据类型。

  如何让Handler执行Runnable时打开新的线程:

  1、首先生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供

  HandlerThread handlerThread = new HandlerThread("handler_thread");

  2、在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();

  handlerThread.start();

  3、根据这个HandlerThread对象得到其中的Looper对象。4、创建自定义的继承于Handler类的子类,其中实现一个参数为Looper对象的构造方法,方法内容调用父类的构造函数即可。

  5、使用第三步得到的Looper对象创建自定义的Handler子类的对象,再将消息(Message)发送到该Handler的消息队列中,Handler复写的handleMessage()将会执行来处理消息队列中的消息。

    
[2] sench touch的Cannot read property 'offsetBoundary' of undefined有关问题
    来源: 互联网  发布时间: 2014-02-18
sench touch的Cannot read property 'offsetBoundary' of undefined问题

在 Sencha Touch中,如果对一个Ext.form.Toggle的对象直接setValue,将会出现Cannot read property 'offsetBoundary' of undefined的错误,这算是一个bug,因为在slider的代码注释中的例子,就是直接setValue的,要避免这个错误,必须在render完之后进行setValue操作:

 

listener: {    
 afterrender: function(theSlider){

                       theSlider.setValue(35);
                    }
}

 

 


    
[3] handler运用之-线程队列与ui线程
    来源: 互联网  发布时间: 2014-02-18
handler使用之---线程队列与ui线程

这里Handler线程队列和ui主线程公用一共。Handler并没有真正的启动一个线程,而是直接调用run方法。

public class Test extends Activity implements OnClickListener {

    @Override

    protected void onStop() {

        // TODO Auto-generated method stub

        super.onStop();

        handerHandler.removeMessages(0);

    }

 

    private TextView textView1;

 

    public static int add;

 

    private Handler handerHandler = new Handler() {

 

        /*

         * (non-Javadoc)

         * @see android.os.Handler#handleMessage(android.os.Message)

         */

        @Override

        public void handleMessage(Message msg) {

            switch (msg.what) {

                case 0:

//                    textView1.setText("add");

                    textView1.setText(""+add+"");

                   ++add;

                   removeMessages(0);

                   sendEmptyMessageDelayed(0, 5000);

                    Log.e("I AM HANDLER", "I AM TEST>>>>>>>>>>>>>>>>>>>>>>>O");

                    break;

                case 1:

 

                    break;

                case 3:

 

                    break;

                case 4:

 

                    break;

            }

            super.handleMessage(msg);

        }

    };

 

    Runnable testRunnable = new Runnable() {

        public void run() {

 

            // 在这个线程里我们发送一个消息给消息队列,发完之后继续执行下面的代码,

            // 至于发送的消息的处理由handleMessage处理。这是异步的两个线程,实现了两个线程间的通信

            handerHandler.sendEmptyMessage(0);

            Log.e("这是一个线程", "》》》》》》》》》》》》》》》》》》》》》》这个线程要打印run");

        }

    };

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        init();

        handerHandler.post(testRunnable);

 

//        Message msg = new Message();

//        msg.what=0;

//        handerHandler.sendMessage(msg);

        //这用方法比上面那种Message的获取方法节省内部空间

//        Message msg=handerHandler.obtainMessage();

//        msg.arg1=0;

//        handerHandler.sendMessage(msg);

 

 

 

    }


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3