Android 消息机制简单讲解
一、原理
1. Message
消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可 发送一条包含更新信息的Message给UI线程。
2. Message Queue
消息队列,用来存放通过Handler发布的消息,按照先进先出执行。
3. Handler
Handler是Message的主要处理者, 负责将Message添加到消息队列以及对消息队列中的 Message进行处理。
4. Looper
循环器,扮演Message Queue和Handler之间桥梁的角色,循环取出Message Queue里 面的Message,并交付给相应的Handler进行处理,还将普通线程转为Looper线程(Looper线程其实就是循环线程)。
代码:
代码如下 | 复制代码 |
public class LooperThread extends Thread { public Handler mHandler; @Override public void run() { // 将当前线程初始化为Looper线程 Looper.prepare(); // ...其他处理,如实例化handler mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; // 开始循环处理消息队列 Looper.loop(); } } |
5. 线程
UI thread 通常就是main thread, 而Android启动程序时会替它建立一个Message Queue。
每一个线程里可含有一个Looper对象以及一个MessageQueue数据结构。在你的应用程
序里,可以定义Handler的子类别来接收Looper所送出的消息。
总结一下,Message Queue、Handler、Looper它们三者之间的关系如下图:
现在微信可以给我们朋友随时发信息了,就像短信一样,下面我来给各位同学介绍微信5.0怎么给好友群发信息,有需要了解的朋友可参考具体方法
1.我们在手机中登录微信,然后在微信中点击“我”
2.然后在我的面板中点击“通用”
3.然后我们找到“功能”菜单
4.然后点击“群发助手”
5.再点击“开始群发”
6.然后点击“新建群发”
7.最后选择你要群发的好友,点“下一步”然后发送就可以了(也可以直接点右上角的全选)
友情提示
操作方法非常简单,不过微信5.0以下版本不能照此方法操作了,现在有个易信可以免费发短信打电话哦,这个比微信要好。
SQLite是一种小型的数据库存储形式,他可以不安装数据库就可以直接快速的使用像mysql一样的语句,下面我来介绍在安卓开发中一些SQLite数据删除,增加,修改,查询等操作。
一、原理
SQLite的相关介绍我就不说了,想了解的同学可以谷歌或百度一下,好~ 直接进入主题,要使用SQLite存储数据,首先先创建数据库,创建的方法如下:
SQLiteDatabase db = openOrCreateDatabase("数据库名字.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
// 创建person表
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)")当创建完数据库后就可以使用SQLite了,接下来我们对数据库进行 增、删、改、查操作l了。
增:
代码如下 | 复制代码 |
Person person = new Person(); person.setName("john"); person.setAge(19); // 插入数据 db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)",new Object[] { person.getName(), person.getAge() }); |
删:
代码如下 | 复制代码 |
String whereClause = "_id=?";//删除的条件 String[] whereArgs = {"1"};//删除的条件参数 db.delete("person",whereClause,whereArgs); |
//执行删除改:
代码如下 | 复制代码 |
Person person2 = new Person(); |
查:
代码如下 | 复制代码 |
Cursor c = db.rawQuery("select * from person where name=?",new String[]{"john"}); |
下面是完整的代码。
二、代码
第一步:
代码如下 | 复制代码 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
第二步:
代码如下 | 复制代码 |
package com.msquirrel.activity; |
第三步:
代码如下 | 复制代码 |
|
最后大家要记得把SQLiteDatabase给关掉。
圆形进度条我们以前在flash加载时会有这种效果,下面我来介绍关于Android(安卓) ClipDrawable 实现圆形进度条效果实现方法,各位同学可进入参考。
话就不多说了,直接上代码。
二、源码
步骤一、在根目录下创建 drawable文件夹,然后在drawable里创建clip_btimap.xml
代码如下 | 复制代码 |
<?xml version="1.0" encoding="utf-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:clipOrientation="horizontal" android:drawable="@drawable/t2" android:gravity="left|start" > </clip> |
步骤二、activity_main.xml
代码如下 | 复制代码 |
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" |
步骤三、MainActivity
代码如下 | 复制代码 |
|
一、原理
时间戳的原理是把时间格式转为十进制格式,这样就方便时间的计算。好~ 直接进入主题。(下面封装了一个类,有需要的同学可以参考或是直接Copy 就可以用了。)
如: 2013年08月23日 转化后是 1377216000000
二、步骤
1、创建 DateUtilsl类。
代码如下 | 复制代码 |
|
2、在对应使用的地方调用就可以了。
代码如下 | 复制代码 |
|
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
- 下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
用Intel HAXM给Android模拟器Emulator加速
Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20- 在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
Android开发中布局中的onClick简单完成多控件时的监听的利与弊
本文章来为各位介绍一篇关于Android开发中布局中的onClick简单完成多控件时的监听的利与弊的例子,希望这个例子能够帮助到各位朋友. 首先在一个控件加上这么一句:and...2016-09-20Ubuntu 系统下安装Android开发环境 Android Studio 1.0 步骤
Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,可以在Linux,Mac OS X,Window...2016-09-20- 这篇文章主要为大家详细介绍了Android实现简单用户注册案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-26