android面试时生命周期与handler、HandlerThread.doc_第1页
android面试时生命周期与handler、HandlerThread.doc_第2页
android面试时生命周期与handler、HandlerThread.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于activity:生命周期用户进入A界面调用A的(初始化信息onCreate 、可见 onStart、 人机交互 onResume)由A通过Intent完成跳转进入B时调用A的(onPause) 然后调用B的(初始化信息onCreate、 可见 onStart 、人机交互 onResume)如果A的界面完全不可见则会调用A的onStop 由B返回A时调用B的onPause,然后调用A的(初始化信息onRestart 、可见 onStart 、人机交互 onResume)调用B的onStop 再调用B的onDestroy销毁B,android的缓存是不可逆的,只能回退不能向前,在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了被KILL掉了,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanceState的作用。当一个Activity在PAUSE时,被kill之前,它可以调用onSaveInstanceState()来保存当前activity的状态信息(在paused状态时,要被KILLED的时候)。用来保存状态信息的Bundle会同时传给两个method,即onRestoreInstanceState() and onCreate().关于线程与handlerHandler:Handler在android里负责发送和处理消息。它的主要用途有:1)按计划发送消息或执行某个Runnanble(使用POST方法);2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)public class DemoHandler extends Activity /* Called when the activity is first created. */private Button btn01, btn02;Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); btn01=(Button) findViewById(R.id.Button01); btn02=(Button) findViewById(R.id.Button02); btn01.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) / 执行把线程添加到主线程中handler.post(update);); btn02.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) /执行把线程从主线程移除任务handler.removeCallbacks(update);); /创建Handler对象 Handler handler=new Handler(); /将要执行的操作写在线程对象的run方法当中 Runnable update=new Runnable()Overridepublic void run() / TODO Auto-generated method stubSystem.out.println(000);/每三秒執行一次update方法即从新执行该方法handler.postDelayed(update, 3000); ;(第一步创建一个Handler对象,第二步写一个Runnable线程,实现里面的run方法,在run方法中handler的postDelayed方法(每3000毫秒启动一次update方法)第三步给控件btn一个监听,调用handler.psot和handler.removeCallbacks方法压入线程和移除线程。这一个过程不存在创建新线程的行为,只是完成的调用)public class HandlerThreadDemo extends Activity Overrideprotected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);System.out.println(activityId-+Thread.currentThread().getId();/创建一个HandlerThread对象,HandlerThread ht=new HandlerThread(handler_thread);ht.start();/得到线程ht使用的looper对象,将其传递给MyHandlerMyHandler mh= new MyHandler(ht.getLooper();/获取消息对象Message msg=mh.obtainMessage();/在消息中用bundle传递数值Bundle b=new Bundle();b.putInt(age, 12);b.putString(a,wangchao);msg.setData(b);/相当于启动了Handler里面的HandleMessage方法msg.sendToTarget();/mh.sendMessage(msg);class MyHandler extends Handler/实现传进来的looper对象与handler里面的looper对象进行绑定public MyHandler(Looper looper)/调用父类中的handler中的构造函数接收loopersuper(looper);Overridepublic void handleMessage(Message msg) /接收bundle传递的值Bundle b=msg.getData();int age = b.getInt(age);String name = b.getString(a);System.out.println(+ age+sdasf+name);System.out.println(msg threadId:+Thread.currentThread().getId();/*使用handler执行新线程 * 1.生成一个HandlerThread对象 * 2.在使用HandlerThread的getLooper方法之前调用 该类对象ht的start方法 * 3.创建一个继承于Handler类的子类,实现一个参数为Looper对象的构造方法 * 4.实现ht中的looper绑定在构造函数中调用的Handler中的looper方法 * class LooperThread extends Thread * public Handler mHandler; * public void run() * Looper.prepare(); * /Initialize the current thread as a looper. * mHandler = ne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论