25、消息处理

5.前台服务8.0以上系统
1.配置权限

2.创建消息通知
//1.构建消息管理器 NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //2.构建消息通道 NotificationChannel channel=new NotificationChannel(ID,NAME,NotificationManager.IMPORTANCE_HIGH); //3.创建消息通道 manager.createNotificationChannel(channel); //4.构建消息 Notification notification=new Notification.Builder (this,ID) .setContentTitle (“收到一条重要通知”) .setContentText (“这是重要通知”) .setSmallIcon (R.mipmap.ic_launcher) .build (); //5.发送前台服务消息 startForeground(1,notification);

第9章 网络编程
HTTP协议简介
HTTP(Hyper Text Transfer Protocol)协议即超文本传输协议,它规定了浏览器和万维网服务器之间互相通信的规则。
一次HTTP请求的过程
建立连接-发送请求-处理请求-返回数据-发送请求2-………关闭连接
HTTP请求的常用方式
GET
POST
HTTP请求的格式
请求行
请求头
请求体
HTTP响应的格式
响应行 (包含响应码:200 404 500 302)
响应头
响应体

GET方式和POST方式提交数据
HTTP/1.1协议中共定义了八种方法来表明Request-URI指定的资源的不同操作方式。其中最常用的两种请求方式是GET和POST。

GET方式与POST方式的区别
GET方式以实体的方式得到由请求URL所指向的资源信息,向服务器提交的参数跟在请求URL后面。使用GET方式访问网络URL的长度是有限制的,请求URL的长度要小于1K。

POST方式用来向目的服务器发出请求,要求它接收被附在请求后的实体。它向服务器提交的参数在请求后的实体中,POST方式对URL的长度是没有限制的。

使用HttpConnection
URL : 包含请求地址的类
URL(path) : 包含请求路径的构造方法
openConnection() : 得到连接对象
HttpURLConnection : 代表与服务器连接的类
setRequestMethod(“GET/POST”) : 设置请求方式
setDoInput(true/false):设置可以读取服务器端返回的数据
setDoOutput(true/false):设置可以向服务器端写入数据
setConnectTimeout(time) : 设置连接超时时间, 单位为ms
setReadTimeout(time): 设置读取服务器返回数据的时间
connect() : 连接服务器
int getResponseCode(): 得到服务器返回的结果码
Int getContentLength() : 得到服务器返回数据的长度(字节)
getOutputStream() : 返回一个指向服务器端的数据输出流
getInputStream() : 返回一个从服务器端返回的数据输入流
disconnect() : 断开连接

HttpURLConnection的基本用法
在实际开发中,绝大多数的App都需要与服务器进行数据交互,此时就需要用到HttpURLConnection,它是一个标准的Java类。

URL url = new URL(“http://www.itcast.cn”);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(“GET”);
conn.setConnectTimeout(5000);
InputStream is = conn.getInputStream();
try{
//读取流信息,获得服务器返回的数据
}catch(Exception e){
}
conn.disconnect();

第9章 网络编程
1.HttpURLConnection
网络请求要使用子线程;

<?xml version="1.0" encoding="utf-8"?> https://www.baidu.com/ 7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y= fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=

android:usesCleartextTraffic=“true” android:networkSecurityConfig="@xml/network_security_config"
new Thread(new Runnable() { @Override public void run() { try{//1.构建请求地址 URL url=new URL(“https://www.baidu.com/”); //2.获取HttpUriConnection对象 HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //3.设置请求信息 /** json 数据传递 * connection.setRequestMethod(“GET”); * connection.setDoOutput(true); * connection.setDoInput(true); * connection.setUseCaches(false); * String data= (unmae=admin) + (passs=123);要求数据格式 * OutputStream out=connection.getOutputStream(); * out.write(data); */ connection.setConnectTimeout(50000); //connection.setRequestProperty(“charset”,“utf-8”); //连接 connection.connect(); //4.获取响应 if(connection.getResponseCode()==200){ //5.处理响应内容 InputStream in=connection.getInputStream();
InputStreamReader isr=new InputStreamReader(in,“utf-8”); BufferedReader reader=new BufferedReader(isr); String line; while((line=reader.readLine())!=null){ System.out.println(line); }reader.close(); isr.close(); in.close(); } }catch (Exception e){ e.printStackTrace(); } } }).start();
HttpClient的基本用法
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、功能丰富的、支持HTTP协议的客户端编程工具包。

使用HttpClient访问网络与HttpURLConnectiond的过程大致相同
1)创建HttpClient对象
2)指定访问网络的方式,创建一个HttpPost对象或者HttpGet对象
3)如果需要发送请求参数,可调用HttpGet、HttpPost的setParams()方法
4)调用HttpClient对象的execute()方法访问网络
5)调用HttpResponse.getEntity()方法获取HttpEntity对象
使用HttpClient
HttpClient/DefaultHttpClient : 能提交请求的客户端对象
HttpResponse execute(HttpUriRequest request)
执行包含请求数据的请求对象, 返回包含响应数据的响应对象
HttpParams getParams()
得到包含请求参数的对象
HttpConnectionParams : 设置请求参数的工具类
static setConnectionTimeout(params, time) : 设置获取连接的超时时间
static setSoTimeout(params, time): 设置读取数据的超时时间
HttpGet : Get请求
HttpGet(String path) : 包含请求路径的构造方法
HttpPost : Post请求
HttpPost(String path) : 包含请求路径的构造方法
setEntity(HttpEntity entity) : 设置请求体
使用HttpClient
HttpResponse : 服务器返回的响应
getStatusLine() : 得到响应状态行, 从而得到状态码
getEntity() : 得到响应体数据对象
NameValuePair/BasicNameValuePair : 包含参数键值对
BasicNameValuePair (String name, String value)
EntityUtils : 解析HttpEntity的工具类
toString(httpEntity,String charSet): 按照指定的字符集解析响应体, 得其内容字符串

  1. 关闭连接, 释放资源:
    client.getConnectionManager().shutdown();

Handler消息机制
在使用手机下载软件时,通常都能在界面上看到一个下载的进度条,这个进度条用来表示当前下载的进度。但是Android4.0以后不能在UI线程访问网络,而子线程也不能更新UI界面。为了根据下载进度实时更新UI界面,就需要用到Handler消息机制来实现线程间的通信。

Handler机制主要包括四个关键对象,分别是:Message、Handler、MessageQueue、Looper。
Message
Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。

创建对象: Message.obtain(what) --消息池 (字符串常量池,连接池,线程池)
封装数据
public int what //id 标识
public int arg1
public int arg2
public Object obj

Handler
Handler主要用于发送消息和处理消息。一般使用Handelr对象的sendMessage()方法发送消息,消息经过一系列处理后,最终会传递到Handler的handlerMessage()方法中。
发送即时消息: sendMessage(Message msg)
发送延时消息: sendMessageDelayed(Message msg, long time)
处理消息: handleMessage(Message msg) (回调方法)
移除还未处理的消息: removeMessages(int what)
MessageQueue
MessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。它是一个按Message的when排序的优先级队列。(when:代表着被处理的时间)
Looper
Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会进入到一个无线循环中。然后一发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的HandlerMessage()方法中。

使用Handler的一般步骤
创建Handler成员变量对象, 并重写其handleMessage()

在分/主线程创建Message对象

使用handler对象发送Message

在handleMessage()中处理消息

Handler消息处理首先需要在UI线程创建一个Handler对象,然后在子线程中调用Hanlder的sendMessage()方法,接着这个消息会存放在UI线程的MessageQueue中,通过Looper对象取出MessageQueue中的消息,最后分发回Hanlder的handleMessage()方法中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值