android多线程-客户端

预备知识:

一、android每个客户端分为两条线程:

1.主线程:负责生成主界面,并响应用户动作,并且把用户输入的数据写入socket对应的输出流。

2.子线程:负责读取从服务器发送过来的数据,并且显示到程序界面上。

二、Handler消息传递机制

(一)Handler的两个作用:

1.在新启动的线程中发送消息。

2.在主线程中获取、处理消息。

(二)Handler相关的几个组件:

1.Message:Handler接收和处理的消息对象。

2.Looper:每个线程只能拥有一个Looper。

主线程(UI线程)中,系统已经初始化一个Looper对象,所以主线程中只出现Handler,没有出现Looper。

子线程中,程序猿需要自己创建一个Looper,先后顺序为:Looper.prepare();   Handler handler=new handler(){.......};  Looper.loop();

其中prepare()方法保证每个线程最多只有一个Looper对象;loop()方法是用一个死循环不断取出MessageQueue中的消息,并将取出的消息分给该消息对应的Handler进行处理。

3.MessageQueue:消息队列,采用先进先出的方式来管理Message。

三者关系:

MessageQueue是通过Looper来管理Message的,即,Looper是赋予了MessageQueue的先进先出功能。

Handler是对消息进行处理的。

三、关于BufferedReader的作用

1.首先它是一个缓冲区;而rendline()方法:会在读取到换行字符时候,会将整行字符串传入。

2.这个东西只有在socket(服务器传向客户端)把数据传出客户端时候用到,其作用是把服务器传过来的数据(s.getInputStream())通过InputStreamReader进行转换成字符串流。方便后面handler对其进行处理!

整理下多线程客户端的思路:

1.Activity      (   UI见面的设计

+处理从服务器传来的消息的Handler

+定义与服务器通信的子线程(ClientThread clientThread=new ClientThread(handler))

+启动clientThread线程 new Thread(clientThread).start();

+监听器(例如发送消息)

);

2.子线程ClientThread

(定义一个向ui线程发送信息的handler和接收ui线程的信息的两个handler

+run()方法{  链接服务器ip和端口

+获取从服务器发来的信息br=new BufferedReder(new InputStreamReader(s.getInputStream()));

+启动一条子线程读取服务器传来的数据(包括标记并且传入message,然后发送给handler)

}

+为当前线程初始化Looper.prepare();

+创建Handler对象:对从UI线程传来的信息做处理并且写入网络中传给服务器

+Looper.loop();

);

android多线程-客户端,布布扣,bubuko.com

时间: 2024-10-13 12:30:09

android多线程-客户端的相关文章

Android多线程文件下载器

本应用实现的是输入文件的网络的地址,点击按钮开始下载,下载过程中有进度条和后面的文本提示进度, 下载过程中按钮不可点击,防止重复的下载,下载完毕后会进行Toast的提示显示, 并且回复按钮的可点击性,进度条也会清空,当然如果下载中途结束应用进程就会进行进度的保存, 下次下载同样的文件时就会从进度记录进行下载,节省流量和时间 应用需要的应用权限: 访问网络权限 <uses-permission android:name="android.permission.INTERNET"/&

Android多线程----异步消息处理机制之Handler详解

关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解 在Android当中,提供了异步消息处理机制的两种方式来解决线程之间的通信问题,一种是今天要讲的Handler的机制,还有一种就是之前讲过的 AsyncTask 机制. 一.handler的引入: 我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃.相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创

Android多线程编程(一)——多线程基础

什么是进程 一个进程是一个独立(self contained)的运行环境,它可以看作一个程序或者一个应用. 什么是线程 而线程是进程中执行的一个任务,Java运行环境是一个包含了不同累和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. Android线程 Android的线程,实际上和Java的多线程编程并没有什么本质上的不同.当我们需要执行一些耗时操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应我们的请求,如

Android中客户端请求服务器端的方式讲解(一)附源码

Android中客户端请求服务器端的两种方式:Post方式和Get方式 在这里不直接赘述了,直接上源码如下: (1).Post的方式: /** * Post的请求方式 * * @param model * 请求序号 * @param paramList * 客户端请求的数据参数列表 * @return */ public JSONObject doPost(int model, List<NameValuePair> paramList) { try { // 客户端向服务器发送请求的数据 L

无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

Android多线程分析之四:MessageQueue的实现

罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前面两篇文章<Android多线程分析之二:Thread的实现>,<Android多线程分析之三:Handler,Looper的实现>中分别介绍了 Thread 的创建,运行,销毁的过程以及 Thread与 Handler,Looper 之间的关联:Thread 在其 run() 方法中创建和运行消息处理循环 Looper,而 Looper::loop() 方法不断地从 Messag

Android多线程分析之二:Thread的实现

Android多线程分析之二:Thread 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前文<Android多线程分析之一:使用Thread异步下载图像>中演示了如何使用 Thread 处理异步事务.示例中这个 Java Thread 类都是位于 Framework 层的类,它自身是通过 JNI 转调 dalvik 里面的 Thread 相关方法实现的.因此要分析 Androd 中的线程,就需要分析这两层中的与线程相关的代码,这就是本文要

Android多线程分析之一:使用Thread异步下载图像

罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 打算整理一下对 Android Framework 中多线程相关知识的理解,主要集中在 Framework 层的 Thread, Handler, Looper, MessageQueue, Message, AysncTask,当然不可避免地要涉及到 native 方法,因此也会分析 dalvik 中和线程以及消息处理相关的代码:如 dalvik 中的 C++ Thread 类以及 Message

Android多线程研究(4)——从一道面试题说起

有一道这种面试题:开启一个子线程和主线程同一时候运行,子线程输出10次后接着主线程输出100次,如此重复50次.先看以下代码: package com.maso.test; /** * * @author Administrator * 两个线程,当中是一个主线程,第一个线程先运行输出10次,主线程接着运行输出100次,如此重复50次 */ public class ThreadTest3 implements Runnable{ private static Test test; @Overr