- 浏览: 460264 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
baiyingtao:
这些信息不太够,我们希望得到相关Keyword的段落,页码,区 ...
Lucene学习之使用Apache Tika进行文档内容抽取 -
王爱学志:
boolean isExist=false; 可以不用直接用 ...
去掉数组中重复元素的最高效算法 -
gavinj:
这些版本都太老了,这里贴出了xcode6系列下载地址,需要的朋 ...
xcode的各个版本的下载地址 -
最美的风景:
帮我大忙了
Android获得Location信息的方法 -
harvin:
yangwei0915 写道可以转载!谢谢。
android 中判断WiFi是否可用的可靠方法
在java的线程中,没有办法停止一个正在运行中的线程。在Android的AsyncTask中也是一样的。如果必须要停止一个线程,可以采用这个线程中设置一个标志位,然后在线程run方法或AsyncTask的doInBackground方法中的关键步骤判断这个标志位以决定是否继续执行。然后在需要终止此线程的地方改变这个标志位以达到停止线程的目的。
从外部调用AsyncTask的cancel方法并不能停止一个已经启动的AsyncTask。这个cancel方法的作用与线程的interrupt方法相似,调用了一个线程的interrupt方法之后线程仍然运行,但是如果该线程的run方法里面调用过sleep的或者wait方法后,处于sleep或wait状态,则sleep和wait立即结束并且抛出InterruptedException异常。AsyncTask的cancel方法也一样,如果在这个Task的doInBackground方法中调用了sleep或wait方法,当在UI线程中调用了这个Task实例的cancel方法之后,sleep或wait立即结束并且抛出InterruptedException异常,但是如果捕获该异常的代码后面还有其他代码,则这些代码还会继续执行。测试代码如下:
package com.task; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class AsyncTaskTest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //set the six buttons listener Button startButton=(Button) this.findViewById(R.id.StartTask); final TestAsyncTask task=new TestAsyncTask(0); startButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { task.execute("str1","str2"); } }); Button endButton=(Button) this.findViewById(R.id.StopTask); endButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { task.cancel(false); } }); Button startSleepButton=(Button) this.findViewById(R.id.StartThread_sleep); final ThreadForTestSleep threadForTestSleep=new ThreadForTestSleep(); startSleepButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { threadForTestSleep.start(); } }); Button endSleepButton=(Button) this.findViewById(R.id.StopThread_sleep); endSleepButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { threadForTestSleep.interrupt(); } }); Button startWaitButton=(Button) this.findViewById(R.id.StartThread_wait); final ThreadForTestWait threadForTestWait=new ThreadForTestWait(); startWaitButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { threadForTestWait.start(); } }); Button endWaitButton=(Button) this.findViewById(R.id.StopThread_wait); endWaitButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { threadForTestWait.interrupt(); } }); } /** * AsyncTask * @author alex * */ private class TestAsyncTask extends AsyncTask<String, Integer, Double>{ double a; public TestAsyncTask(double a){ this.a=a; } @Override protected Double doInBackground(String... params) { for(String param:params){ Log.i("TestAsyncTask","param:"+param ); } Log.i("TestAsyncTask", "doInBackground is start"); for(int i=0;i<10000000;i++){ a=i*i+i; Log.d("-----", "a:"+a); } Log.i("TestAsyncTask", "sleep 1 is end"); try { Thread.sleep(30000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.i("TestAsyncTask", "sleep 2 is end and continue execute"); return a; } protected void onPostExecute(Double result){ Log.i("last a value is", ""+result); } } /** * test sleep * @author Administrator * */ private class ThreadForTestSleep extends Thread{ public void run(){ Log.i("ThreadForTestWait", "sleep start"); try { sleep(30000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } double a; for(int i=0;i<10000000;i++){ a=i*i+i; Log.d("-----", "a:"+a); } Log.i("ThreadForTestWait", "sleep end"); } } /** * test wait * @author Administrator * */ private class ThreadForTestWait extends Thread{ public void run(){ Log.i("ThreadForTestWait", "wait start"); try { synchronized(this){ wait(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.i("ThreadForTestWait", "wait end"); } } }
发表评论
-
Android的开发规范整理之界面刷新
2018-05-17 11:04 5041.后一个界面(Activity)的操作导致前一个界面(A ... -
Android的开发规范整理之Handler的使用
2018-05-17 10:53 6831.关于Handler的使用,在Activity或者Ser ... -
Android TV开发之模拟器的设置
2017-12-10 13:36 2007在进行Android TV开发时,会碰见模拟器显示的效果跟 ... -
activity 启动service的三种方式区别
2017-06-10 11:01 539在Activity中启动Service有三种情况,具体的启 ... -
android 获取sd卡路径的两种方法
2018-05-17 11:20 1243/** * 方法一 * @return ... -
android NDK 开发环境搭建
2016-08-20 21:46 6021.下载android ndk 推荐版本为:android ... -
android进阶-----解决scrollview嵌套listview的问题
2016-08-15 16:40 323在android开发中,经常会碰到在ScrollView中 ... -
部分android手机不支持USB Host功能
2015-11-02 16:07 1365在android开发USB功能时,少部分android的手 ... -
PhoneGap 安装配置时遇到的问题及解决办法
2015-09-23 14:36 964PhoneGap在3.0之后就不能 ... -
解决 “android New package not yet registered with the system.”问题
2015-05-03 12:21 1529在android开发中因为更换包名或者为activity设置 ... -
Xcode真机调试 could not lunch failed to get reply to handshake packet
2015-01-31 23:25 4031解决的办法是 通用--->还原--->还原所有设置 ... -
android使用.9,png图片作为背景的问题
2014-10-30 10:11 3344在android的开发中,很多的时候需要使用.9.png来做为 ... -
android的小问题:You need to use a Theme.AppCompat theme
2014-07-30 16:43 7220android的一个小问题: Caused by: ... -
ViewPager中添加百度地图MapView,Page切换时地图显示黑屏问题
2014-05-14 11:47 7196在ViewPager的选项卡中增加的Page多余3个,如果 ... -
百度地图与高德地图坐标转换
2014-05-13 10:42 2540android项目使用了百度地图的定位SDK,web端使用的 ... -
拟物化化设计和扁平化设计
2014-03-20 17:32 10761. 拟物化设计 skeuomorphism 代表作 ... -
html5在移动开发中优势和劣势
2014-03-06 10:46 3280现在html5的应用已经非常广泛了,尤其是在移动端得到了较 ... -
android Button selector不起作用
2013-11-24 20:43 2234我们在Android开发中,经常需要设置Button在不同 ... -
Android Button快速滑过,ACTION_UP事件不触发的问题的解决
2013-10-16 15:56 6306在android界面编程时,经常要实现当Button一直 ... -
Android调用系统短信功能发送短信
2013-04-17 15:28 1169android调用系统短信功能发送短信有两种方法, 第一 ...
相关推荐
比较了handler加thread 和 AsyncTask 在处理消息的不同,详见博客 http://blog.csdn.net/renlei0109/article/details/39524463
AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。 1) 子类化AsyncTask 2) 实现AsyncTask中定义的下面一个或几个方法 ...
采用两种方式thread+handler和asynctask方式来异步下载网络上的图片
android Handler Thread AsyncTask httpURLConnection学习的代码
关于AsyncTask的简单运用,其中有关于界面响应阻塞错误的简单示例和Thread+Handler的简单使用 本工程作为个人博文的示例代码。 博文详情见:http://blog.csdn.net/ft2028739/article/details/8085329
AsyncTask是Thread和handler结合的工具类,记录一下,里面记录了关于AsyncTask几个比较重要的方法,如何实现并行和串行执行任务。
AsyncTask是个好东西,能处理绝大多数应用线程和更新UI的任务,由于其内部使用了静态线程池,如果你有一堆异步任务(例如全局定时更新数据、同一个Activity中多个AsyncTask同时执行)其中有不能马上执行完的情况...
在Android开发中,AsyncTask可以使得用户避免直接使用Thread类和Handler 来处理后台操作,适用于需要异步处理数据并将数据更新到界面上的情况。AsyncTask适用于后台操作只有几秒的短时操作。但是AsyncTask本身存在很...
通过AsyncTask的方式实现在网页加载图片,实现加载的异步操作,同时理解使用AsyncTask的异步和Thread+Message+Handler异步操作的差异。
AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度...
三种不同的方式讲述了如何开辟新线程处理进度条的更新。运行时需修改Mainfest,来用不同的方式运行。默认是使用AsyncTask运行
#Android-AsyncTask-Executor #非常过时,请永远不要使用它看看 、 和其他用于并发数据处理的库 ##为什么要使用它?... task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { task.ex
简介 ...AsyncTask设计之初就是辅助Thread和Handler的,并且不会生成线程。AsyncTask应该被用于短时间内的操作(最多几秒钟),如果你想要长时间保持线程运行,请使用Executor或者ThreadPoolExecut
Android API 3时引进了AsyncTask,也叫异步任务。使用它可以很方便的更新主线程中的UI,使用它比Handler、Thread更简单。由于AsyncTask是抽象类,要使用它首先要创建子类继承它。创建子类时需要三个泛型参数
Thread 通常要搭配 Handler 使用,而 AsyncTask 用意在简化背景执行 thread 程序码的撰写。 如果您预期要执行的工作能在几秒内完成,就可以选择使用 AsyncTask,若执行的时间很长, Android 则强烈建议采用 Executor...
较大的磁盘IO操作,网络socket等,这些都会导致我们的主线程对用户的响应变得迟钝,甚至ANR,这些会使应用的用户体验变差,但是有时又的确需要执行这些耗时的任务,那么我们通常可以使用AsyncTask或者new Thread ...
// protected Void doInBackground(Void... params) { // int count = 0;...// Thread.sleep(500); // } catch (InterruptedException e) { // e.printStackTrace(); // } // } // return null; // }
当我们在加载一个列表的时候,比如GridView ,这时候我们考虑到不阻塞UI的做法,一般会使用线程Thread 、Timer 或者使用AsyncTask ,而这些操作都是在在后台另外开一个线程给我们找数据,具体得到的数据需要使用...
从实现上来说,AsyncTask内部封装了Thread和Handler,通过AsyncTask可以更加方便的执行后台任务以及在主线程中访问UI,但AsyncTask并不适合非常耗时的后台任务,对于特别耗时的任务,建议使用线程池。 AsyncTask本身...