Android再学习-20141023-Intent-Thread
20141023-Android再学习
Intent对象的基本概念
- Intent是Android应用程序组件之一
- Intent对象在Android系统中表示一种意图
- Intent当中最重要的内容是action与data
Intent对象的基本使用方法
使用Intent在Activity之间传递数据的方法
- 在Activity之间可以通过Intent对象传递数据
- 使用putExtra()系列方法向Intent对象当中存储数据
- 使用getXXXExtra()系列方法从Intent对象当中取出数据
回顾Java当中的线程概念
- 线程的两种实现方式
- 继承Thread,代表线程
- 实现相关接口,代表线程体
- 线程的生命周期
- 多线程同步
MainThread(UI Thread)和Worker Thread
- 所有与UI有关的代码写在MainThread当中。
- 主线程不能阻塞,主线程一般不进行耗时较长的操作,比如联网下载,读取大文件等。
Android当中的线程使用
什么是Handler
Handler、Looper和MessageQueue的基本原理
Handler把消息对象添加到MessageQueue中,Looper负责从MessageQueue的头部不断取出消息对象,取出一个消息对象之后交给Handler处理。
public void onClick(View v){
//当用户点击按钮是,创建一个消息对象,并使用Handler发送该消息对象
Message msg = handler.obtainMessage();//获取Message对象
msg.what = 2;//给Message属性赋值
handler.sendMessage(msg);//把消息对象放到消息队列当中去
//1. Looper将会从消息队列当中将消息对象取出,
//2. Looper将会找到与消息对象对应的Handler对象(每一个消息对象都有一个对应的Handler对象)。
//3. Looper将会调用消息对象的handleMessage(Message, msg)方法,用于处理该消息对象
}
通过Handler实现线程间的通信
在主线程当中实现Handler的handleMessage()方法
在Worker Thread当中通过Handler发送消息
public class MainActivity enxtends Activity {
private Textview textview;
private Button button;
private Handler handler; //3. 定义一个变量
@Override
protected void conCreate(Bundle savedInstanceState) {
super.onCreate(savedINstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textViewId);
button = (Button)findViewById(R.id.buttonId);
handler = new Myhandler(); //4.使用Myhandler类生成对象
button.setOnClickListener(new ButtonListener());//绑定监听器
}
class MyHandler extends Handler {
//1.首先定义一个handler的实现类,继承Handler
@Override
public void handleMessage(Message msg) {
//2. 然后实现handleMessage方法
System.out.println("handleMessage--->" + Thread.currentThread().getName()); // 测试说明:打印当前线程的名字
String s= (String)msg.obj; // 8. 在主线程中将数值取出
textView.setText(s); //在主线程中操作UI
}
}
class ButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
Thread t = new NetWorkThread();
t.start();
}
}
class NetworkThread extends Thread {
//本线程为Worker Thread
//@Override
public void run(){
System.out.println("network--->" + Thread.currentThread().getName()); // 测试说明:打印当前线程的名字
//模拟访问网络,所以当线程运行时,首先休眠2秒
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//变量s的值,模拟从网络中获取的数据
String s = "网络中的数据";
//textView.setText(s);//这样的操作是错误的,安卓系统中UI操作原则上只能在主线程中进行
Message msg = handler.obtainMessage(); // 5.生成Message对象
//sendMessage方法无论在主线程中发送还是在Worker Thread中发送都可以,这里在WorkerThread当中发送,然后在主线程将消息取出。
msg.obj = s; // 6. 把s赋值给obj
handler.sendMessage(msg); // 7. 调用sendMessage方法发送消息
}
}
}
Android再学习-20141023-Intent-Thread的更多相关文章
- Android再学习-20141022-Activity的生命周期
20141022-Android再学习 如何在一个应用程序当中定义多个Activity 定义一个类,继承Activity 在该类当中,复写Activity当中的onCreate方法.onCreate( ...
- Android再学习-20141018-布局-进度条
20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...
- Android开发学习之Intent具体解释
Intent简单介绍和具体解释: Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述. ...
- Android开发学习笔记Intent 一
Inten的概念 1.Intent是Android四大组件直接沟通的桥梁 2.Intent是一种运行时绑定(runtime binding)机制 Intent对象的属性 Itent的种类 Inten过 ...
- Android再学习-便签开发小结-20141119
这几天的便签开发,首先遇到的问题就是数据库操作问题.现在已经可以读写数据库了,并能将数据放在正确的位置显示. 专门建立了一个数据库操作的包,命名为"...database".新建一 ...
- Android再学习-20141111-Android应用的七大件
Android应用的七大件 应用程序的四大组件: Android的四大组件,使用时需要在程序中注册. Activity: Activity是应用程序的一个界面,可以通过这个界面查看联系人.打电话或者玩 ...
- Android再学习
1.点击事件的几种实现方式 Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源 Btn1.setOnClickListener(new ...
- Android再学习-20140928-布局
关于布局中的单位 PX是像素,这个没有问题.另外还有两个单位,一个是dp,这个是个相对单位,在任何分辨率的屏幕上显示效果是一样的,所以用dp来进行控件的大小设置.另外,字体的设置推荐用sp,这样字体可 ...
- Android开发学习之路--Activity之Intent
窗外再次飘起了小雪,还有1周就过年了,2016年即将到来,来年不知道自己将身处何处,船到桥头自然直吧.还是继续学习吧,上次学习了Activity,那么如果是两个Activity之间,怎么从一个Acti ...
随机推荐
- Linux格式化分区报错Could not start /dev/sda No such file or directory 解决办法
Linux查看已经分好的区[root@linuxidc ~]# fdisk -l /dev/sda Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 he ...
- 转:VC中UpdateData()函数的使用
VC中UpdateData()函数的使用 UpdateData(FALSE)与UpdateData(TRUE)是相反的过程 UpdateData(FALSE)是把程序中改变的值更新到控件中去 ...
- 游览器保存密码和自动填充密码的困惑 (browser save password and auto fill password )
原文 refer : http://www.cnblogs.com/happyfreelife/p/4240100.html 当一个带有username and password 的表单被提交, 游览 ...
- ural 1020 Rope
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...
- Gridview中奇偶数行颜色设置
在gridview中的RowDataBound事件里面写 switch (e.Row.RowType) {case DataControlRowType.Header: e.Row.BackColor ...
- 如何在Excel中启用宏?
OFFICE2003版本中启用宏的方法: 1.首先打开EXCEL应用程序. 2.点击上方的"工具"--"宏"--"安全性" 3.在" ...
- jsp中pageEncoding、charset=UTF -8
jsp中pageEncoding.charset=UTF -8" 在JSP/Servlet 中主要有以下几个地方可以设置编码,pageEncoding="UTF-8". ...
- POJ2761---Feed the dogs (Treap求区间第k大)
题意 就是求区间第k大,区间 不互相包含. 尝试用treap解决一下 第k大的问题. #include <set> #include <map> #include <cm ...
- java泛型编程
一般的类和方法都是针对特定数据类型的,当写一个对多种数据类型都适用的类和方法时就需要使用泛型编程,java的泛型编程类似于C++中的模板,即一种参数化类型的编程方法,具体地说就是将和数据类型相关的信息 ...
- Python模拟登录实战(二)
目标:1.模拟登录豆瓣,2.自动更改签名和发表说说. 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan ...