android异步任务处理
来源:互联网 发布:mac有什么好用的软件 编辑:程序博客网 时间:2024/05/20 02:21
如果将比较费时的进程放在主进程中,那么会出现卡顿现象,给用户造成很不好的用户体验,用段代码来说明`
package com.example.testthread;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { Thread.sleep(2000);//延时,造成主线程阻塞 System.out.println(">>>>>卡顿<<<<<<"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } });}
}
new Thread(){
上面代码按了按钮之后,那个按钮会出现一秒钟的延时(卡顿),给用户带来很不好的用户体验,这是我们需要把耗时的操作步放在线程中,即新建一个线程,new Thread,然后把好事操作放在该线程中,然后重写run()方法,调用start()方法,把上面onclick方法里面的内容换成下面的:
@Override public void run() { // TODO Auto-generated method stub super.run(); try { Thread.sleep(2000); System.out.println(">>>>>>...cccc"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start();`
此时我们再按按钮,会发现马上就会弹起来,不会出现一秒的延时。
android还提供了一个异步操作类ASyncTask,用个小例子来解释
布局文件如下`
package com.example.usingasynctask;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class MainActivity extends Activity { TextView textView ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textview); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub ReadURL("http://www.baidu.com"); } }); } private void ReadURL(String url) { // TODO Auto-generated method stub new AsyncTask<String, Void, String>() { @Override protected String doInBackground(String... params) { try { URL url = new URL(params[0]); URLConnection connection = url.openConnection();//获取当前的网络连接 InputStream istream = connection.getInputStream(); InputStreamReader isr = new InputStreamReader(istream); BufferedReader br = new BufferedReader(isr); String line; StreamBuilder builder= new StreamBuilder(); while((line = br.readline()) != null){ builder.append(line); } br.close(); istream.close(); return builder.toString(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onCancelled() { // TODO Auto-generated method stub super.onCancelled(); } @Override protected void onCancelled(String result) { // TODO Auto-generated method stub super.onCancelled(result); } @Override protected void onPostExecute(String result) { textView.setText(result); super.onPostExecute(result); } @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); } @Override protected void onProgressUpdate(Void... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); } }.execute(url); }}
点击按钮后,按钮会被迅速弹起,说明主线程没有被阻塞,
0 0
- Android-异步任务处理
- Android异步任务处理
- android异步任务处理
- android:AsyncTask实现异步处理任务
- android:AsyncTask实现异步处理任务
- Android开发AsyncTask异步处理任务
- Android自用-----AsyncTask实现异步处理任务
- Android开发AsyncTask异步处理任务
- Android异步任务的处理方法
- Android事件处理之五 异步任务
- (专栏)Android异步任务处理从零开始
- Android网络通信之异步任务处理
- Android异步任务处理之AsyncTask
- Android异步任务处理之Thread线程
- Android 使用线程池处理异步任务
- Android使用线程池处理异步任务
- Android使用线程池处理异步任务
- 异步任务处理(转)
- 服务器架构--------iis与Apache共存搭建(都可以使用域名访问,而不带后面的:80,90等)
- Java并发编程系列之九:AQS
- Map Filter两个高阶函数,涵盖所有数组
- 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variabl
- 如何排版文字较多的PPT?
- android异步任务处理
- sysbench安装、对Mysql压力测试、结果解读及mysql数据库跟踪优化
- 扩展欧几里得(乘法逆元)
- Tsinsen A1108 棋盘
- 5-28 猴子选大王 (20分)
- get√ Java
- chrome 调试web app方法
- ADB高级应用
- iOS中的链式编程