- 浏览: 61685 次
- 性别:
- 来自: 湖南
最新评论
-
Neacy_Zz:
有些Android也可以显示的出来。
Android 将一张CMYK模式的图片转换成RGB模式的图片 -
hold_on:
AsyncTask 2.3 和 4.0稍有不同
Android从零开始(十五)
知识点:异步任务AsyncTask
Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则: 1、 不要阻塞UI线程
2、 确保只在UI线程中访问Android UI工具包 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。
AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。 Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。 AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。 1) 子类化AsyncTask
2) 实现AsyncTask中定义的下面一个或几个方法 onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。 doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。 onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。 onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread. 为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI thread中创建 2) execute方法必须在UI thread中调用 3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
好了废话不说了看一下一个简单的例子吧·····
步骤一、建立服务器(我这里建立的是一个web服务,只有一个简单的servlet)代码如下
步骤二、建立一个Android项目(主页文件代码如下
步骤三、Activity编写事件方法(代码如下)
源码下载请点击这里:
Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则: 1、 不要阻塞UI线程
2、 确保只在UI线程中访问Android UI工具包 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。
AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。 Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。 AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。 1) 子类化AsyncTask
2) 实现AsyncTask中定义的下面一个或几个方法 onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。 doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。 onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。 onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread. 为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI thread中创建 2) execute方法必须在UI thread中调用 3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
好了废话不说了看一下一个简单的例子吧·····
步骤一、建立服务器(我这里建立的是一个web服务,只有一个简单的servlet)代码如下
package myaction; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Service1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); System.out.println("请求被接收"); out.flush(); out.close(); } }
步骤二、建立一个Android项目(主页文件代码如下
<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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical" > <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/btn_connectionTest" android:onClick="myEvent" android:text="连接测试" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/btn_getXML" android:onClick="myEvent" android:text="获取xml信息" /> </LinearLayout>)
步骤三、Activity编写事件方法(代码如下)
package com.example.asynct; import java.net.HttpURLConnection; import java.net.URL; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void myEvent(View view) { switch (view.getId()) { case R.id.btn_connectionTest: new AsyncTask<String, Void, String>(){ @Override protected void onPostExecute(String result) { Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show(); } @Override protected void onProgressUpdate(Void... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); } //在后台要执行的操作,这个方法属于非UI @Override protected String doInBackground(String... params) { String msg = null; try { URL url = new URL(params[0]); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setRequestMethod("GET");// 默认就是GET conn.setConnectTimeout(6000); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { msg = "连接成功"; } } catch (Exception e) { Log.e("tag", e.toString()); StackTraceElement[] ste = e.getStackTrace(); for (int i = 0; i < ste.length; i++) { Log.e("tag", ste[i].toString()); } } return msg; } }.execute("http://10.0.2.2:8080/MyWebService/test1.do"); break; } } }
源码下载请点击这里:
- 异步任务.zip (1.3 MB)
- 下载次数: 1
发表评论
-
Android自定义控件--3(刷新动画)
2014-02-26 11:14 946一个乐动力的刷新动画 package com.example. ... -
Android自定义控件--2(数字签名)
2014-02-26 11:08 919客户信息交互用到的一个数字签名,保存的是bmp图片(我那会在P ... -
Android自定义控件--1(TextView跑马灯效果)
2014-02-26 10:57 1554N久没有跟新了,最近 ... -
Android 将一张CMYK模式的图片转换成RGB模式的图片
2013-06-25 17:32 2213Android系统是不能够显示打印模式(CMYK)的图片的。所 ... -
Android TextToSpeech语音播放文本
2013-06-25 17:17 1850步骤一、初始化 package com.example.spe ... -
Android连接电脑eclipse无法识别=解决办法
2013-05-23 09:25 21401、方法一:“我的电脑”-->“属性”-->“设备 ... -
Android BaseAdapter如何获得每一项并添加按钮事件
2013-05-21 15:11 3734package com.hangcheng; impor ... -
Android的VideoView如何循环播放
2013-05-15 14:01 4832package com.hangcheng; impor ... -
Android如何获取asset目录下所有文件的路径
2013-05-15 09:48 7691package com.hangcheng.util; ... -
Android--WebView+HTML+Javascript
2013-04-09 17:17 1709知识点:android的WebView控件加载HTML并通过j ... -
VideoView重绘
2013-04-01 23:39 1328知识点:Android中的VideoView控件默认情况下是不 ... -
Android从零开始—多媒体(二十二)
2013-03-06 21:43 1031知识点:音乐播放、录音、播放视频、录像、拍照 步骤一、主界面 ... -
Android从零开始—监听广播BroadcastReceiver(二十一)
2013-03-05 10:17 2081知识点:电话拒接+短息 ... -
Android从零开始—电话+短信(二十)
2013-03-05 10:03 1138知识点:系统电话号码和短信的获取(最好用真机,模拟器上木有电话 ... -
Android从零开始(十九)
2013-02-27 10:35 960知识点:back键的处理(有时候我们可能会不小心按了回退键,但 ... -
Android从零开始(十八)
2013-02-27 10:24 837知识点:菜单(menu) 步骤一、创建菜单项(核心代码如下) ... -
Android从零开始(十七)
2013-02-27 10:09 943知识点:抽屉(SlidingDrawer) 先看一下抽屉打开 ... -
Android从零开始(十六)
2013-02-26 19:43 841知识点:闪屏(通常在 ... -
Android从零开始(十四)
2013-02-26 17:16 833知识点:TabHost选项卡之 ... -
Android从零开始(十三)
2013-02-23 22:57 813知识点:TabHost 效果图: 工程目录结构: ...
相关推荐
《Android开发从零开始视频教程》下载地址,常期可用! 文件大小:2.3GB 文件格式:MP4 视频内容: [Android开发从零开始].1.Android开发环境搭建.mp4 30.6MB [Android开发从零开始].2.模拟器的使用.mp4 20.8MB ...
从零开始 Android 编程
android从零开始 若水 源代码 43课时 全有
从零开始android游戏编程 包括源码
NULL 博文链接:https://1136051009.iteye.com/blog/1777096
NULL 博文链接:https://1136051009.iteye.com/blog/1815762
基于经典的坦克大战游戏,学习中不失乐趣。 通过整个游戏开发过程从零开始学习Android开发
Android开发从零开始课件源代码
Android开发从零开始源码,很好的资源,对初学者很有用!
从零开始学Android 编程 [曾宏远,崔荔蒙 编著] 2012年版.rar,适用于对安卓手机编程开发有兴趣的初学者。
《从零开始Android游戏编程》(第二版)PDF文档,Android游戏开发入门教程。
[Android开发从零开始].1.Android开发环境搭建
最详细"从零开始搭建架构实施Android项目指导文档
Android刷新时数字从零开始刷新
从零开始android游戏编程
从零开始学Android编程源代码 02-10章的源代码,欢迎下载
从零开始学Android编程
对于没有基础的java和android也可以从零开始。
[Android开发从零开始].9.Activity高级学习