- 浏览: 465818 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
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 5661.后一个界面(Activity)的操作导致前一个界面(A ... -
Android的开发规范整理之Handler的使用
2018-05-17 10:53 7171.关于Handler的使用,在Activity或者Ser ... -
Android TV开发之模拟器的设置
2017-12-10 13:36 2075在进行Android TV开发时,会碰见模拟器显示的效果跟 ... -
activity 启动service的三种方式区别
2017-06-10 11:01 579在Activity中启动Service有三种情况,具体的启 ... -
android 获取sd卡路径的两种方法
2018-05-17 11:20 1297/** * 方法一 * @return ... -
android NDK 开发环境搭建
2016-08-20 21:46 6401.下载android ndk 推荐版本为:android ... -
android进阶-----解决scrollview嵌套listview的问题
2016-08-15 16:40 347在android开发中,经常会碰到在ScrollView中 ... -
部分android手机不支持USB Host功能
2015-11-02 16:07 1429在android开发USB功能时,少部分android的手 ... -
PhoneGap 安装配置时遇到的问题及解决办法
2015-09-23 14:36 998PhoneGap在3.0之后就不能 ... -
解决 “android New package not yet registered with the system.”问题
2015-05-03 12:21 1571在android开发中因为更换包名或者为activity设置 ... -
Xcode真机调试 could not lunch failed to get reply to handshake packet
2015-01-31 23:25 4084解决的办法是 通用--->还原--->还原所有设置 ... -
android使用.9,png图片作为背景的问题
2014-10-30 10:11 3397在android的开发中,很多的时候需要使用.9.png来做为 ... -
android的小问题:You need to use a Theme.AppCompat theme
2014-07-30 16:43 7259android的一个小问题: Caused by: ... -
ViewPager中添加百度地图MapView,Page切换时地图显示黑屏问题
2014-05-14 11:47 7262在ViewPager的选项卡中增加的Page多余3个,如果 ... -
百度地图与高德地图坐标转换
2014-05-13 10:42 2612android项目使用了百度地图的定位SDK,web端使用的 ... -
拟物化化设计和扁平化设计
2014-03-20 17:32 11251. 拟物化设计 skeuomorphism 代表作 ... -
html5在移动开发中优势和劣势
2014-03-06 10:46 3325现在html5的应用已经非常广泛了,尤其是在移动端得到了较 ... -
android Button selector不起作用
2013-11-24 20:43 2277我们在Android开发中,经常需要设置Button在不同 ... -
Android Button快速滑过,ACTION_UP事件不触发的问题的解决
2013-10-16 15:56 6366在android界面编程时,经常要实现当Button一直 ... -
Android调用系统短信功能发送短信
2013-04-17 15:28 1230android调用系统短信功能发送短信有两种方法, 第一 ...
相关推荐
本篇文章将详细探讨两种常见的异步处理方式:`AsyncTask`和`Thread`配合`Handler`,并进行对比分析。 `AsyncTask`是Android SDK提供的一种轻量级的异步任务处理机制,它主要用于短时间的后台操作,如网络请求、数据...
- **InternalHandler**:AsyncTask 使用 InternalHandler 在后台线程和 UI 线程之间通信,将结果和进度更新回主线程。 ### 4. AsyncTask 的生命周期与限制 - **生命周期**:AsyncTask 的生命周期与 Activity 关联...
本文将深入探讨`AsyncTask`的`cancel`方法的有效用法以及如何实现强制停止`AsyncTask`异步任务。 ### 1. AsyncTask的基本结构 AsyncTask由三个泛型参数定义:`Params`(输入参数类型)、`Progress`(后台任务进度...
本文将深入探讨两种主要的异步处理方式:线程(Thread)结合Handler以及AsyncTask,它们都是Android中用于解决此问题的有效工具。 1. **线程(Thread)与Handler**: - **线程**:在多线程环境中,线程是程序执行...
AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。 1) 子类化AsyncTask 2) 实现AsyncTask中定义的下面一个或几个方法 ...
如果需要并行执行,需手动设置`AsyncTask.THREAD_POOL_EXECUTOR`。 - 避免在`doInBackground()`方法中直接操作UI,否则会抛出异常。 总结,`AsyncTask`是Android中实现简单异步操作的有效工具,特别适用于短时、...
在Android开发中,`Handler`、`Thread`、`AsyncTask`和`HttpURLConnection`是四个非常关键的概念,它们涉及到应用程序的多线程处理、网络通信以及UI更新。接下来,我们将详细探讨这些知识点。 首先,`Thread`是Java...
在Android开发中,`Handler`、`AsyncTask`和`Looper`是三个非常重要的概念,它们主要用于处理应用程序的异步操作和线程通信。本文将深入探讨这些知识点,并通过实例来展示它们如何协同工作。 首先,`Handler`是...
总之,AsyncTask是Android开发中处理轻量级异步任务的重要工具,通过合理的使用,可以提高应用的响应性和用户体验。然而,对于更复杂的后台任务,如长时间运行的服务或大量网络请求,建议使用其他如IntentService、...
AsyncTask包含三个泛型参数:Params、Progress和Result。Params是输入类型,通常是你在execute()方法中传递的数据;Progress是后台任务进度的类型,如果你需要在界面上显示任务进度,这将派上用场;Result是后台任务...
AsyncTask是Android平台中用于在后台执行耗时操作并更新UI的一...理解并熟练运用AsyncTask是Android开发中的一项基本技能,但随着Android版本的升级和开发模式的变化,开发者应当根据实际需求选择合适的异步处理方式。
AsyncTask和Handler的优缺点比较 AsyncTask是Android提供的轻量级异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI...
以下是对Android线程、线程池、AsyncTask、HandlerThread和IntentService的详细解释。 1. **Android线程**: Android应用主要运行在主线程(UI线程)上,负责显示和交互。为了防止主线程被长时间运行的任务阻塞,...
关于AsyncTask的简单运用,其中有关于界面响应阻塞错误的简单示例和Thread+Handler的简单使用 本工程作为个人博文的示例代码。 博文详情见:http://blog.csdn.net/ft2028739/article/details/8085329
`AsyncTask`包含三个泛型参数:`Params`、`Progress`和`Result`。`Params`表示执行任务所需的输入参数类型,`Progress`表示后台任务的进度类型,而`Result`则是任务执行的结果类型。下面将详细解释`AsyncTask`的工作...
AsyncTask的使用需要设定三个泛型Params、Progress和Result的类型,如AsyncTask,Integer,Void>: * Params是指调用execute()方法时传入的参数类型和doInBackgound()的参数类型 * Progress是指更新进度时传递的参数...
总的来说,HandlerThread、AsyncTask和Handler都是Android中用于异步处理和UI更新的重要工具。理解并熟练掌握它们的使用,能帮助开发者编写出更加流畅、高效的Android应用。在实际项目中,应根据任务的性质和需求...
在Android开发中,`Handler`、`AsyncTask`和`Looper`是三个关键组件,用于在后台线程和主线(UI)线程之间进行通信,处理异步任务和更新用户界面。下面将详细阐述这三个组件的工作原理以及如何使用它们。 **Handler...
`AsyncTask`的核心在于三个泛型参数:`Params`、`Progress`和`Result`,分别代表输入参数类型、进度类型和返回结果类型。它的主要方法包括: 1. `onPreExecute()`:在任务执行前被调用,通常在这里进行初始化工作,...
总的来说,理解和熟练运用`AsyncTask`以及`Thread + Message + Handler`模型是Android开发中的基础技能。它们可以帮助开发者优化应用性能,提供流畅的用户体验。通过这个项目,你可以实践和比较两种方法,加深对异步...