需求如下:在做demo的時候,彈出dialog,需要定時先后執行修改ui的動作.
譬如:
第一次 間隔 2s msg:正在下載
第二次 間隔 2s msg:下載完成,開始安裝
第三次 間隔 2s msg:安裝完成
第四次 間隔 1s 關閉dialog.
自定義Timer類如下:
public class CustomTimer extends Timer {
List<Task> taskList = new ArrayList<Task>();
public CustomTimer addTask(Task task) {
int index = taskList.size();
taskList.add(task);
if (index > 0) {
taskList.get(index - 1).setNextTask(task);
}
return this;
}
public void start() {
if (taskList.size() > 0) {
sched(this, taskList.get(0));
}
}
private CustomTimer sched(final CustomTimer currentCustomTimer,
final Task currenttask) {
final CustomTimer next = new DialogTool().new CustomTimer();
currentCustomTimer.schedule(new TimerTask() {
@Override
public void run() {
currenttask.run();
if (currenttask.getNextTask() != null) {
sched(next, currenttask.getNextTask());
}
}
}, currenttask.getDelay());
return currentCustomTimer;
}
public abstract class Task {
private Task nextTask;
public abstract void run();
public abstract long getDelay();
public Task getNextTask() {
return nextTask;
};
public void setNextTask(Task next) {
this.nextTask = next;
}
}
}
//用法如下:
public static void showProgressDialog2(Context context, String title,
String msg, boolean cancelable, final long runtime, int iconId,
final String title2, final String msg2, final long closetime) {
final ProgressDialog mypDialog = new ProgressDialog(context);
mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //
// 设置ProgressDialog 标题
mypDialog.setTitle(title); // 设置ProgressDialog 提示信息
mypDialog.setMessage(msg); // 设置ProgressDialog 标题图标
mypDialog.setIcon(iconId); // 设置ProgressDialog 的进度条是否不明确
mypDialog.setIndeterminate(false); // 设置ProgressDialog 是否可以按退回按键取消
mypDialog.setCancelable(cancelable); // 让ProgressDialog 显示
mypDialog.show();
// final Handler currentHandler = new
// EHandler(Looper.getMainLooper(),mypDialog);
final Activity activity = (Activity) context;
// new Timer().schedule(new TimerTask() {
// @Override
// public void run() {
// // Message msg= currentHandler.obtainMessage(1,1,1,msg2);
// // currentHandler.sendMessage(msg);
// // 試試用runOnUiThread方法
// activity.runOnUiThread(new Runnable() {// 對UI的操作放在uiThread里面
// public void run() {
// mypDialog.setMessage(msg2);
// mypDialog.setTitle(title2);
// };
// });
// new Timer().schedule(new TimerTask() {
// @Override
// public void run() {
// mypDialog.dismiss();
// }
// }, closetime);
// }
// }, runtime);
// test...
DialogTool dt = new DialogTool();
CustomTimer ct = dt.new CustomTimer();
dt.new CustomTimer().addTask(ct.new Task() {
@Override
public long getDelay() {
return runtime;
}
@Override
public void run() {
activity.runOnUiThread(new Runnable() {
public void run() {
mypDialog.setMessage(msg2);
mypDialog.setTitle(title2);
}
});
}
}).addTask(ct.new Task() {
@Override
public long getDelay() {
return runtime;
}
@Override
public void run() {
activity.runOnUiThread(new Runnable() {
public void run() {
mypDialog.setMessage("third message");
mypDialog.setTitle("third title");
}
});
}
}).addTask(ct.new Task() {
@Override
public long getDelay() {
return closetime;
}
@Override
public void run() {
mypDialog.dismiss();
}
}).start();
}
分享到:
相关推荐
配合AlarmManager,可以在指定时间启动IntentService执行任务。首先,创建一个IntentService,然后使用AlarmManager设置一个重复的闹钟,每次闹钟触发时启动IntentService。 2. **自定义Service结合Timer/TimerTask...
合理安排任务的执行顺序和频率,可以提高应用程序的效率和响应性。 压缩包中的文件 `timer.pbl`、`timer.pbt` 和 `timer.pbw` 分别代表 PowerBuilder 的库文件、项目文件和工作区文件: - **timer.pbl**:这是一个...
在传统的同步编程中,代码会按顺序执行,如果某个操作需要较长时间,程序会阻塞直到该操作完成,导致UI无响应。异步编程通过回调函数、事件或Promise(在.NET中是Task)来避免这种阻塞,使得程序可以同时处理多个...
定时器执行器可以根据预定的时间间隔执行任务,或者在特定时间点执行一次。 3. **线程池(ThreadPool)**:线程池是管理和复用线程的有效机制,它可以避免频繁地创建和销毁线程带来的开销。在Java中,可以使用`java...
2. `fixedRate` 参数指定了任务连续执行之间的间隔时间,单位为毫秒,适合需要按照固定频率执行的任务。 3. `fixedRateString` 参数与 `fixedRate` 类似,但接受字符串形式的间隔时间,通常用于从配置文件中读取间隔...
需要注意的是,`Timer`类并非完全线程安全,多个任务之间的执行顺序可能不按预期进行。在高并发场景下,可能需要使用更高级的并发工具,如`ScheduledExecutorService`(来自`java.util.concurrent`包)。 8. **...
任务调度模块负责设定和管理任务的执行时间,任务执行模块则根据调度信息执行实际的任务,而用户界面模块则为用户提供友好的操作界面。在设计和实现这些模块时,开发者可能运用了面向对象的设计原则,如封装、继承和...
2. `System.Threading.Timer`:这个类提供了一个更灵活的定时器,它的回调可以在指定的上下文(例如UI线程)中执行。它通过`Callback`参数传递一个委托,当时间到时,该委托会被调用。 ```csharp using System....
例如,每次任务执行时,我们可以更改ImageView的图片资源来实现图片切换。 ```java class AutoPlayTask extends TimerTask { @Override public void run() { // 在这里实现图片切换逻辑,如更新ImageView的图片 ...
在Windows中,可以使用SetTimer API来创建定时器,它会在指定时间间隔后向消息队列发送一条消息。在"win消息队列timer"中,开发者可能通过自定义的消息处理函数来响应这些定时事件,从而实现特定的功能,比如定期...
这种方式避免了中断级的任务执行,保证了任务的顺序性和安全性。 在实现这个实例时,首先需要创建消息队列,定义消息结构和最大消息数量。然后,创建自定义定时器,设置定时时间,并指定一个回调函数,该函数在...
Java中的定时器任务是通过`java.util.Timer`类来实现的,它允许我们在特定时间或按照特定周期执行任务。`Timer`类提供了调度任务的方法,而这些任务是通过`TimerTask`类来定义的。`TimerTask`是`Runnable`接口的子类...
例如,"按字母或数字顺序排列列表框中的列表项"可能是其中一个功能,它利用定时器来动态更新列表框的内容,使其按照指定的顺序排序。这通常涉及到对数组或集合的操作,以及对用户界面元素的实时更新。 在VB中,常见...
- **时间间隔**:支持按固定时间间隔重复执行任务。 每个任务可以被赋予唯一的名字,并可以加入到特定的“任务组”中。触发器也可以被命名并分组,以便更好地管理。任务可以注册多个触发器,而每个触发器都可以根据...
例如,可以设定一个定时任务在特定间隔后执行,以减少不必要的CPU占用。 总结来说,通过使用Swift中的GCD、OperationQueue以及定时器,我们可以创建一个高效的任务调度器,有效降低CPU负载,减少内存消耗,提高应用...
在实际应用中,如果需要处理长时间运行的任务,通常会采用多线程或多任务机制,将进度条更新和任务执行放在不同的线程上,以保持UI的响应性。 总之,这个“单线程进度条程序”旨在提供一种简便的方法,将进度条功能...
8. **Cancellation**:GCD提供了一种取消任务的机制,通过`dispatch_group_notify`或`dispatch_group_async`的配合,当所有任务执行完毕或被取消时,可以执行清理操作。 在实际项目中,结合这些知识点,开发者可以...
在JDK5中,多线程并发库引入了一系列新的特性,极...对于定时任务,`Timer`类提供了一种灵活的安排,可以根据需求定制任务执行的时间间隔。在需要控制线程执行顺序时,可以结合`wait()`和`notify()`进行线程间的协作。
2. **自动滚动**: 在自定义的ViewPager中添加一个定时器(`Timer`)和一个任务(`TimerTask`),用于周期性地改变当前显示的页面。可以通过设置`setCurrentItem()`方法实现自动滑动。记得在用户手动滑动时取消定时器...
2. 程序的概念:程序是由一系列指令组成的,这些指令按照特定的顺序排列,用来告诉计算机执行特定任务。程序员使用计算机语言(如VB、C++、Python等)来编写程序,这些语言更接近人类语言,便于理解。 3. 翻译方式...