package com.hk.wos;
import android.os.AsyncTask;
/**
* 方便在activity中获取网络任务
*
* @author 包子大叔
* @time 2013-8-15 下午4:16:18
*/
public abstract class BaseTaskActivity extends BaseActivity {
/**
* 后台线程,一般用于获取网络任务
*/
protected MyTask myTask;
/**
* 判断默认线程myTask是否正在运行
*
* @return
*/
protected boolean isTaskWorking() {
if (myTask != null) {
return true;
} else {
return false;
}
}
/**
* 启动线程,一般用于网络数据的获取; 线程主体请实现doInTask()方法, 线程结束后将调用onTaskOver()方法;
*/
protected void startTask() {
if (isTaskWorking()) {
toast("任务正在执行...");
} else {
showDialogLoading(true);
myTask = new MyTask();
myTask.execute();
}
}
/**
* 线程主体,只能做数据处理,不能处理UI
*
* @return 返回网络任务得到的json字符串,本字符串会传入onTaskOver()方法中
*/
abstract protected String doInTask();
/**
* 线程完成后触发本方法,可以在这里进行数据处理,UI处理,(不需要关系线程和等待中对话框)
*
* @param result
* 后台线程主体doInTask()方法返回的字符串
*/
abstract protected void onTaskOver(String result);
/**
* 一般用于获取网络数据
*
* @author 包子大叔
* @time 2013-8-15 下午4:14:58
*/
public class MyTask extends AsyncTask<Void, Void, Boolean> {
String result = "";
@Override
protected Boolean doInBackground(Void... params) {
result = doInTask();
return true;
}
@Override
protected void onPostExecute(final Boolean success) {
myTask = null;
showDialogLoading(false);
onTaskOver(result);
}
@Override
protected void onCancelled() {
myTask = null;
showDialogLoading(false);
}
}
}
分享到:
相关推荐
这里介绍的`QueueThreadBase<T>`是一个设计用于Winform应用的多线程基类,它采用了队列的形式来管理待处理的任务。`QueueThreadBase<T>`的核心特性包括: 1. **队列管理**:类中的`m_InnerQueue`是内部使用的队列,...
CWinThread是所有MFC线程的基类,负责线程的创建、调度和管理。创建新线程时,通常需要继承CWinThread并重写它的成员函数,比如Run(),在这里实现线程的具体任务。 二、工作者线程 工作者线程(Worker Thread)主要...
`CWinThread`是MFC提供的线程基类,它包含了线程的基本管理和消息处理功能。在这个示例中,我们可能会看到一个自定义的线程类,如`CProgressThread`,用于执行耗时任务。 2. **进度条控件(ProgressCtrl)**:`...
用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。 在深入了解MFC下创建线程的方法之前,需要先深入学习一下CWinThread类。CWinThread类在MFC类结构中的位置如下图...
异步操作可以在单线程环境中执行,利用I/O完成端口或回调函数,而多线程涉及多个执行线程。异步编程可以避免线程切换的开销,但在某些场景下,多线程是提高并行性的有效手段。 ### WinForm多线程问题 在WinForm应用...
MFC多线程是MFC库中的一个重要特性,允许开发者在同一个应用程序中创建和管理多个执行线程,从而实现并发处理任务,提高程序效率。在Windows操作系统中,多线程技术广泛应用于UI更新、后台数据处理、异步操作等场景...
1. **创建线程类**:首先,我们需要定义一个派生自`CWinThread`的类,这是MFC中的线程基类。在这个派生类中,我们将重写`CWinThread`的虚函数,如`Run()`,在这里编写线程的主要执行逻辑。 2. **设置线程属性**:在...
此外,还可以使用`Delegate.BeginInvoke`进行异步方法调用,这会在后台线程执行。或者,使用线程池`ThreadPool.QueueUserWorkItem`来调度任务,它能更有效地管理线程资源。 线程分为受托管线程(Managed Thread)和...
- **工作线程(Worker Thread)**:工作线程通常不与用户界面交互,而是负责后台处理,如数据计算、网络通信等。它们可以避免因长时间运算导致用户界面无响应。 - **用户界面线程(User Interface Thread)**:...
- **线程类型**:包括主线程(GUI线程)和工作线程,主线程负责用户界面,工作线程通常用于执行耗时操作,不阻塞UI更新。 3. **线程同步与通信** - **临界区**:用于保护共享资源,一次只允许一个线程访问。 - *...
多线程解决了这个问题,将耗时操作放在后台线程执行,主线程则继续处理用户交互。在MFC中,可以使用CWinThread类来创建新线程,它是所有线程类的基础。每个线程都有自己的消息队列和消息循环,可以独立处理任务。 ...
TThread是Delphi中的线程基类,它封装了Windows API中的线程管理功能。通过继承TThread类并重写其Execute方法,开发者可以在新的线程上下文中执行自定义代码。例如,在数据采集的场景下,Execute方法内可以编写用于...
`Synchronized`属性用于决定线程是否能在主线程上同步执行代码,防止数据竞争问题。`FreeOnTerminate`则指示线程结束时是否自动释放自身。 3. **线程的启动与结束**:默认情况下,新建的线程不会立即运行,需要调用...
开发者可以使用QtConcurrent.run()在后台线程中执行函数,然后通过QFuture和QFutureWatcher监听任务的完成情况,这在需要执行大量并行计算时非常有用。 在"ThreadTest"这个压缩包中,可能包含了一个或多个示例程序...
TThread是VCL框架中提供的一种用于创建和管理线程的基类。开发者可以自定义TThread的子类,覆盖其Execute方法来添加线程执行的具体逻辑。创建线程时,可以通过构造函数初始化线程对象,然后调用Start方法启动线程。...
1. **创建线程类**:首先,我们需要创建一个继承自`CWinThread`的类,这是MFC中的线程基类。在派生类中,重写`CWinThread::Run()`方法以定义线程的主要工作。 2. **线程标识**:在线程类中,我们需要设置`m_...
而额外的线程则可以在后台运行,执行特定任务,如数据处理、网络通信等,这样不会阻塞主线程,使得用户界面保持响应。 在Delphi中,我们可以使用TThread类来创建自定义线程。TThread是VCL(Visual Component ...
1. `CWinThread`:这是MFC中的线程基类,代表了操作系统中的一个线程。你可以通过继承这个类并重写其成员函数来实现自己的线程逻辑。 2. `AfxBeginThread`:这是MFC提供的一个函数,用于创建和启动一个新的线程。你...
5. **简化WinForm多线程开发**:可以使用BackgroundWorker组件,它提供了一种简单的方式来在后台线程执行耗时操作,并通过事件在UI线程更新进度。 **线程池** 1. **线程池的作用**:线程池提高了线程的使用效率,...
WaitHandle是一个抽象基类,用于线程同步,如Mutex、Semaphore和EventWaitHandle。它们可用于控制线程的执行顺序和资源访问。 15. **双锁实现Singleton** 双重检查锁定(DCL)用于线程安全地初始化Singleton实例...