本文目录
java 中为什么要引入handler这种设计方法
代码的目的是满足需求,操作方便自然就写了,无论handler还是controller,都是为了实现需求,但当出现大量handler的时候,说明这个程序员啥都不懂,连命名都不会了,命名成XXService、XXDao等,至少从代码上可以看出层次看出功能,便于后期维护 如果这是项目经理写的,只能说明他画虎不成反类犬,很不可取,千万别跟他学
handler在extjs中起什么作用
handler这个属性用于指定事件处理的函数。比如你在一个按钮构造的时候指定它的属性 handler:function(){ alert(“Hello“); }那么你在点击这个按钮的时候,就会执行handler后面的函数(这里是一个匿名函数),弹出一个文本内容为Hello的对话框。
android中handler如何使用
Handler在Android中主要是负责发送和处理消息。它的主要用途大致是下面两个: 1)按计划发送消息或执行某个Runnanble; 2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程) 学写一下,在UI线程中,系统已经有一个Activity来处理了,你可以再起若干个Handler来处理。在实例化Handler的时候,只要有Handler的指针,任何线程也都可以sendMessage。 Handler对于Message的处理是异步处理的。一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送Message(通过sendMessges方法),然后由handleMessage()更新UI)。 根据对视频的学习写了一个通过Button控件启动进度条(类似于下载等操作)的程序,简单介绍一下,有两个Button控件,一个是开始,点击之后会显示一个进度条以每次十分之一的进度进行(一开始是隐藏的),另一个是停止,可以中断进度。 java代码: 1 package zzl.handleactivity; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.os.Message; 7 import android.view.Gravity; 8 import android.view.View; 9 import android.view.View.OnClickListener; 10 import android.widget.Button; 11 import android.widget.ProgressBar; 12 import android.widget.Toast; 13 14 public class Handler_01 extends Activity { 15 16 //声明变量 17 private Button startButton=null; 18 private Button endButton=null; 19 private ProgressBar firstBar=null; 20 private Toast toast=null; 21 @Override 22 protected void onCreate(Bundle savedInstanceState) { 23 super.onCreate(savedInstanceState); 24 setContentView(R.layout.main); 25 26 //根据ID获取对象 27 startButton =(Button)findViewById(R.id.startButton); 28 endButton=(Button)findViewById(R.id.endButton); 29 firstBar=(ProgressBar)findViewById(R.id.firstBar); 30 //给对象设置动作监听器 31 startButton.setOnClickListener(new StartButtonListener()); 32 endButton.setOnClickListener(new EndButtonListener()); 33 } 34 35 class StartButtonListener implements OnClickListener{ 36 37 @Override 38 public void onClick(View v) { 39 // TODO Auto-generated method stub 40 //一开始执行,加入到消息队列,不延迟, 41 //然后马上执行run方法 42 firstBar.setVisibility(View.VISIBLE); 43 firstBar.setMax(100); 44 handler.post(upRunnable); 45 toast=Toast.makeText(Handler_01.this, “运行开始“, Toast.LENGTH_SHORT); 46 toast.setGravity(Gravity.CENTER, 0, 0); 47 toast.show(); 48 } 49 } 50 class EndButtonListener implements OnClickListener{ 51 52 @Override 53 public void onClick(View v) { 54 // TODO Auto-generated method stub 55 //停止 56 handler.removeCallbacks(upRunnable); 57 System.out.println(“It’s time to stop...“); 58 } 59 } 60 61 //创建handler对象,在调用post方法 62 //异步消息处理:将下载或者处理大数据等等单独放到另一个线程 63 //更好的用户体验 64 Handler handler=new Handler(){ 65 66 @Override 67 public void handleMessage(Message msg){ 68 firstBar.setProgress(msg.arg1); 69 firstBar.setSecondaryProgress(msg.arg1+10); 70 //handler.post(upRunnable); 71 if(msg.arg1《=100) { 72 handler.post(upRunnable); //将要执行的线程放入到队列当中 73 }else { 74 handler.removeCallbacks(upRunnable); 75 } 76 } 77 }; 78 79 //声明线程类:实现Runnable的接口 80 Runnable upRunnable=new Runnable() { 81 82 int i=0; 83 @Override 84 public void run() {//程序的运行状态 85 // TODO Auto-generated method stub 86 //postDelayed方法:把线程对象加入到消息队列中 87 // 隔2000ms(延迟) 88 System.out.println(“It’s time to start...“); 89 i=i+10; 90 //获取Message消息对象 91 Message msg=handler.obtainMessage(); 92 //将msg对象的arg1(还有arg2)对象的值设置 93 //使用这两个变量传递消息优点:系统消耗性能较少 94 msg.arg1=i; 95 try{ 96 //设置当前显示睡眠1秒 97 Thread.sleep(1000); 98 }catch(InterruptedException e){ 99 e.printStackTrace(); 100 } 101 //将msg对象加入到消息队列当中 102 handler.sendMessage(msg); 103 if(i==100){//当值满足时,将线程对象从handle中剔除 104 handler.removeCallbacks(upRunnable); 105 firstBar.setVisibility(View.GONE); 106 //临时弹出 107 108 toast=Toast.makeText(Handler_01.this, “运行结束“, Toast.LENGTH_SHORT); 109 toast.setGravity(Gravity.CENTER, 0, 0); 110 toast.show(); 111 } 112 } 113 }; 114 } main.xml 1 《LinearLayout xmlns:android=“ 如果要实现调用另一个新的线程,只要注释post方法,然后加上这样两段代码即可: Thread t = new Thread(r); t.start();
android中Handler的post方法的作用是什么
在工作线程中执行耗时任务,当任务完成时,会返回UI线程,一般是更新UI。这时有两种方法可以达到目的。
一种是handler.sendMessage。发一个消息,再根据消息,执行相关任务代码。
另一种是handler.post(r)。r是要执行的任务代码。意思就是说r的代码实际是在UI线程执行的。可以写更新UI的代码。
扩展资料
一个APK文件结构为:
1、META-INF\ (注:Jar文件中常可以看到);
2、res\ (注:存放资源文件的目录) ;
3、AndroidManifest.xml (注:程序全局配置文件) ;
4、classes.dex (注:Dalvik字节码);
5、resources.arsc (注:编译后的二进制资源文件)。
Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接执行安装,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。
在Android平台中dalvik vm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后androidmanifest.xml文件中的permission分支相关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。
参考资料来源:百度百科-Android