20141023-Android再学习

Intent对象的基本概念

  1. Intent是Android应用程序组件之一
  2. Intent对象在Android系统中表示一种意图
  3. Intent当中最重要的内容是action与data

Intent对象的基本使用方法

使用Intent在Activity之间传递数据的方法

  1. 在Activity之间可以通过Intent对象传递数据
  2. 使用putExtra()系列方法向Intent对象当中存储数据
  3. 使用getXXXExtra()系列方法从Intent对象当中取出数据

回顾Java当中的线程概念

  1. 线程的两种实现方式

    1. 继承Thread,代表线程
    2. 实现相关接口,代表线程体
  2. 线程的生命周期
  3. 多线程同步

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的更多相关文章

  1. Android再学习-20141022-Activity的生命周期

    20141022-Android再学习 如何在一个应用程序当中定义多个Activity 定义一个类,继承Activity 在该类当中,复写Activity当中的onCreate方法.onCreate( ...

  2. Android再学习-20141018-布局-进度条

    20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...

  3. Android开发学习之Intent具体解释

    Intent简单介绍和具体解释:           Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述.               ...

  4. Android开发学习笔记Intent 一

    Inten的概念 1.Intent是Android四大组件直接沟通的桥梁 2.Intent是一种运行时绑定(runtime binding)机制 Intent对象的属性 Itent的种类 Inten过 ...

  5. Android再学习-便签开发小结-20141119

    这几天的便签开发,首先遇到的问题就是数据库操作问题.现在已经可以读写数据库了,并能将数据放在正确的位置显示. 专门建立了一个数据库操作的包,命名为"...database".新建一 ...

  6. Android再学习-20141111-Android应用的七大件

    Android应用的七大件 应用程序的四大组件: Android的四大组件,使用时需要在程序中注册. Activity: Activity是应用程序的一个界面,可以通过这个界面查看联系人.打电话或者玩 ...

  7. Android再学习

    1.点击事件的几种实现方式 Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源 Btn1.setOnClickListener(new ...

  8. Android再学习-20140928-布局

    关于布局中的单位 PX是像素,这个没有问题.另外还有两个单位,一个是dp,这个是个相对单位,在任何分辨率的屏幕上显示效果是一样的,所以用dp来进行控件的大小设置.另外,字体的设置推荐用sp,这样字体可 ...

  9. Android开发学习之路--Activity之Intent

    窗外再次飘起了小雪,还有1周就过年了,2016年即将到来,来年不知道自己将身处何处,船到桥头自然直吧.还是继续学习吧,上次学习了Activity,那么如果是两个Activity之间,怎么从一个Acti ...

随机推荐

  1. 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 ...

  2. 转:VC中UpdateData()函数的使用

    VC中UpdateData()函数的使用 UpdateData(FALSE)与UpdateData(TRUE)是相反的过程     UpdateData(FALSE)是把程序中改变的值更新到控件中去  ...

  3. 游览器保存密码和自动填充密码的困惑 (browser save password and auto fill password )

    原文 refer : http://www.cnblogs.com/happyfreelife/p/4240100.html 当一个带有username and password 的表单被提交, 游览 ...

  4. ural 1020 Rope

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...

  5. Gridview中奇偶数行颜色设置

    在gridview中的RowDataBound事件里面写 switch (e.Row.RowType) {case DataControlRowType.Header: e.Row.BackColor ...

  6. 如何在Excel中启用宏?

    OFFICE2003版本中启用宏的方法: 1.首先打开EXCEL应用程序. 2.点击上方的"工具"--"宏"--"安全性" 3.在" ...

  7. jsp中pageEncoding、charset=UTF -8

    jsp中pageEncoding.charset=UTF -8" 在JSP/Servlet  中主要有以下几个地方可以设置编码,pageEncoding="UTF-8". ...

  8. POJ2761---Feed the dogs (Treap求区间第k大)

    题意 就是求区间第k大,区间 不互相包含. 尝试用treap解决一下 第k大的问题. #include <set> #include <map> #include <cm ...

  9. java泛型编程

    一般的类和方法都是针对特定数据类型的,当写一个对多种数据类型都适用的类和方法时就需要使用泛型编程,java的泛型编程类似于C++中的模板,即一种参数化类型的编程方法,具体地说就是将和数据类型相关的信息 ...

  10. Python模拟登录实战(二)

    目标:1.模拟登录豆瓣,2.自动更改签名和发表说说. 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan ...