1. 如何使用Handler?

创建Handler的方式:

1) new Handler() 
    创建目前正在执行此指令的线程的Handler对象,其Looper通过Looper.Looper.myLooper()获取
2) new Handler(Looper)
    创建指定Looper线程的Handler对象, 如new Handler(Looper.getMainLooper())创建主线程的Handler对象

发送Message方案一:
    static final int KEEP_SCREEN_ON_MSG = 1;static final int GET_NEW_SURFACE_MSG = 2;static final int UPDATE_WINDOW_MSG = 3;final Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case KEEP_SCREEN_ON_MSG: {setKeepScreenOn(msg.arg1 != 0);} break;case GET_NEW_SURFACE_MSG: {handleGetNewSurface();} break;case UPDATE_WINDOW_MSG: {updateWindow(false, false);} break;}}};//发送空消息mHandler.sendEmptyMessage(UPDATE_WINDOW_MSG);//发送一个MessageMessage msg = mHandler.obtainMessage(GET_NEW_SURFACE_MSG);mHandler.sendMessage(msg);

发送Message方案二:

    class AudioHandler extends Handler {private void setDeviceVolume(VolumeStreamState streamState, int device) {//do something}private void setAllVolumes(VolumeStreamState streamState) {//do something}@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case MSG_SET_DEVICE_VOLUME:setDeviceVolume((VolumeStreamState) msg.obj, msg.arg1);break;case MSG_SET_ALL_VOLUMES:setAllVolumes((VolumeStreamState) msg.obj);break;// ...}}}

发送Runnable方案三:

public class MainActivity extends Activity {private Handler h;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);h = new Handler(){public void handleMessage(Message msg) {//do nothing}}; h.post(new myRun());}class myRun implements Runnable{public void run(){ setTitle(String.valueOf(1));h.postDelayed(testRun, 2000);}}Runnable testRun= new Runnable() {public void run(){setTitle(String.valueOf(2));}};
}

2. 如何使用Looper

Looper.prepare();
// 创建Handler
Looper.loop();
// 在此线程中创建的Handler将向Looper的MessageQueue发送消息

3. 创建、实现、启动线程

方案一:
    new Thread(){public void run(){//do something you want to do}}.start();

方案二:

    class Task implements Runnable {public void run() {// do something you want to do}}Task ta = new Task();Thread t1 = new Thread(ta, "MyTask");t1.start();

方案三:

    class MyThread extends Thread {public MyThread() {super("MyThread");}@Overridepublic void run() {Looper.prepare();mMyLooper = Looper.myLooper();mAudioHandler = new AudioHandler();//do something you want to do  Looper.loop();}}AudioHandler mAudioHandler;Looper mMyLooper;MyThread mMyThread = new MyThread();mMyThread.start(); //启动线程// wait some eventmMyLooper.quit(); //使线程退出

4. 实现SurfaceHolder

在SurfaceView中实现的SurfaceHolder如下:

    private SurfaceHolder mSurfaceHolder = new SurfaceHolder() {private static final String LOG_TAG = "SurfaceHolder";public boolean isCreating() {return mIsCreating;}public void addCallback(Callback callback) {synchronized (mCallbacks) {// This is a linear search, but in practice we'll // have only a couple callbacks, so it doesn't matter.if (mCallbacks.contains(callback) == false) {      mCallbacks.add(callback);}}}public void removeCallback(Callback callback) {synchronized (mCallbacks) {mCallbacks.remove(callback);}}public void setFixedSize(int width, int height) {if (mRequestedWidth != width || mRequestedHeight != height) {mRequestedWidth = width;mRequestedHeight = height;requestLayout();}}public void setSizeFromLayout() {if (mRequestedWidth != -1 || mRequestedHeight != -1) {mRequestedWidth = mRequestedHeight = -1;requestLayout();}}public void setFormat(int format) {// for backward compatibility reason, OPAQUE always// means 565 for SurfaceViewif (format == PixelFormat.OPAQUE)format = PixelFormat.RGB_565;mRequestedFormat = format;if (mWindow != null) {updateWindow(false, false);}}/*** @deprecated setType is now ignored.*/@Deprecatedpublic void setType(int type) { }public void setKeepScreenOn(boolean screenOn) {Message msg = mHandler.obtainMessage(KEEP_SCREEN_ON_MSG);msg.arg1 = screenOn ? 1 : 0;mHandler.sendMessage(msg);}public Canvas lockCanvas() {return internalLockCanvas(null);}public Canvas lockCanvas(Rect dirty) {return internalLockCanvas(dirty);}private final Canvas internalLockCanvas(Rect dirty) {mSurfaceLock.lock();if (DEBUG) Log.i(TAG, "Locking canvas... stopped="+ mDrawingStopped + ", win=" + mWindow);Canvas c = null;if (!mDrawingStopped && mWindow != null) {if (dirty == null) {if (mTmpDirty == null) {mTmpDirty = new Rect();}mTmpDirty.set(mSurfaceFrame);dirty = mTmpDirty;}try {c = mSurface.lockCanvas(dirty);} catch (Exception e) {Log.e(LOG_TAG, "Exception locking surface", e);}}if (DEBUG) Log.i(TAG, "Returned canvas: " + c);if (c != null) {mLastLockTime = SystemClock.uptimeMillis();return c;}// If the Surface is not ready to be drawn, then return null,// but throttle calls to this function so it isn't called more// than every 100ms.long now = SystemClock.uptimeMillis();long nextTime = mLastLockTime + 100;if (nextTime > now) {try {Thread.sleep(nextTime-now);} catch (InterruptedException e) {}now = SystemClock.uptimeMillis();}mLastLockTime = now;mSurfaceLock.unlock();return null;}public void unlockCanvasAndPost(Canvas canvas) {mSurface.unlockCanvasAndPost(canvas);mSurfaceLock.unlock();}public Surface getSurface() {return mSurface;}public Rect getSurfaceFrame() {return mSurfaceFrame;}}

5. 使用ProgressDialog

public class MainActivity extends Activity {ProgressDialog mDialog;MyThread mThread;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// create and display the progress in a new threadmDialog = new ProgressDialog(MainActivity.this);  mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  mDialog.setTitle("MyTitle");  //mDialog.setIcon(R.drawable.icon);  mDialog.setMessage("This is a progress example!");  mDialog.setMax(100);  mDialog.setProgress(0);  //mDialog.setSecondaryProgress(50);  mDialog.setIndeterminate(false);  mDialog.setCancelable(true);  mDialog.show(); mThread = new MyThread();mThread.start();}public class MyThread extends Thread {MyThread(){super("MyThread");}@Overridepublic void run(){int i=0;while(i<100){i++;// set the progress valuemDialog.setProgress(i);try{Thread.sleep(100); // sleep 1s}catch(InterruptedException e){e.printStackTrace();}}// destroy the progressmDialog.dismiss();}}
}

6. 如何使用Timer and TimerTask?

package com.example.mytest;import java.util.Timer;
import java.util.TimerTask;import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;public class MainActivity extends Activity {private Timer timer = new Timer();private Handler h;private int k = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);h = new Handler(){public void handleMessage(Message msg) {setTitle((String)msg.obj);}}; // init and start the timerinit();}public void init() {//public abstract class TimerTask implements RunnableTimerTask task = new TimerTask(){@Override public void run() {h.removeMessages(0);Message m = h.obtainMessage(1, 1, 1,Thread.currentThread().getName() + " : "+String.valueOf(k++));h.sendMessage(m);}};// after 500ms execute task firstly, then every 1000ms execute the tasktimer.schedule(task, 500, 1000); //启动Timer线程}
}

Android编程--常用代码相关推荐

  1. Android程序设计报告总结,Android编程常用技巧实例总结

    本文实例讲述了Android编程常用技巧.分享给大家供大家参考,具体如下: 1. 登录的时候,如果输入有误,则输入框左右震动,表示输入有误 在res下准备一个anim文件夹,里面包含两个文件,main ...

  2. Android 编程实用代码大全

    转载:Android 编程实用代码大全 http://www.juapk.com/forum.php?mod=viewthread&tid=325&fromuid=263 1. 查看是 ...

  3. vba 当前文件名_值得收藏的VBA编程常用代码3640

    蓝字关注,加微信NZ9668获资料信息  VBA解决方案   系列丛书作者  头条百家平台 VBA资深创作者 _______________________________ 分享成果,随喜真能量.大家 ...

  4. Android开发常用代码

    android studio 真机利用wifi进行调试 参考网址:https://blog.csdn.net/captive_rainbow_/article/details/81012704 在do ...

  5. Android 开发常用代码片段

    1.图片旋转 Bitmap bitmapOrg = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable. ...

  6. python编程常用代码-Python编程常见问题与解答

    1.问:Python代码运行速度和C语言相比,哪个更快? 答:一般来说,Python代码的运行速度比C语言的慢很多,但是如果充分运用内置函数.标准库对象和函数式编程模式的话,运行速度会提高很多,可以接 ...

  7. Android 编程下代码之(QQ消息列表滑动删除)

       这份代码写出来有些时候了,一直没共享,现在把它共享给大家.简单列一下代码中你可以学到的知识点: 自定义控件的实现方式: 事件的拦截分发消费机制: QQ会话列表滑动删除原理: 最后附上源码链接:Q ...

  8. android 代码片段,Android 中常用代码片段

    一:AsyncTask 的使用 (1)activity_main.xml (2)MainActivity.java public class MainActivity extends Activity ...

  9. android常用代码合集,Android常用代码

    1.图片旋转 Bitmap bitmapOrg = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable. ...

最新文章

  1. 数据连接池的工作机制是什么?
  2. Android Fragment中嵌套Fragment,不显示view
  3. 为什么大部分人做不了架构师?这2点是关键
  4. 数据结构-排序(插入排序)
  5. idea创建包怎么让包分层_idea创建Spring项目的方法步骤(图文)
  6. 转 Java jar (SpringBoot Jar)转为win可执行的exe程序
  7. [转]配置nginx+apache 其中动态由apache处理,静态由nginx处理
  8. LabView2018的安装
  9. 动态修改App.Config 和web.Config
  10. 四种模式、五大架构 规划企业物联网蓝图
  11. 一键搞定JavaEE应用 JRE+Tomcat+Mysql-JaveEE绿色运行环境JTM0 9版
  12. 压缩感知 热身实验 OMP算法Python实现(详细代码注释)
  13. 运输问题---表上作业法
  14. 如何修改计算机mac地址吗,如何修改电脑的Mac地址
  15. latex:表格排版示例
  16. 机器学习 | 样本不平衡问题处理方法
  17. Linux音视频学习--常见的音视频传输协议及基本概念介绍
  18. 推荐一款超快的Android模拟器
  19. 系统可用性量表(SUS )
  20. 树莓派烧写OpenWrt系统后外接华为ME909或移远EC20 4G LTE模块实现4G软路由即MiFi

热门文章

  1. 高校数字化实验室(实训室)综合管理系统
  2. 操作系统学习之文件管理:
  3. windows上datax的使用记录
  4. WIFI手机将登陆上海 打国际长途每分钟0.3元
  5. FIFO就是 first in first out 先进先出
  6. 【C4-AI大赛】2021优秀作品荟
  7. conflicting(conflicting)
  8. [BBS 水木清华站]给Linux新手
  9. Redis Java连接使用
  10. 验证码输入错误怎么再次刷新验证码