android 定时请求(两种实现方式)
方式一: Handler + Runnable (借鉴网址:http://stackoverflow.com/questions/6207362/how-to-run-an-async-task-for-every-x-mins-in-android
private final static int INTERVAL = 1000; // 2 minutes
private static final int ALL_COUNT = 5; // 总资源数
private TextView mTextView;
private ProgressBar mProgressBar; private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
mProgressBar.setProgress(msg.what);
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mTextView = (TextView) this.findViewById(R.id.textView1);
mProgressBar = (ProgressBar) this.findViewById(R.id.progressBar2);
startRepeatingTask();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} Runnable m_handlerTask = new Runnable() {
@Override
public void run() {
int count = doSomething();
if (count <= ALL_COUNT) {
mHandler.sendEmptyMessage((int) ((count / (float) ALL_COUNT)*100));
mHandler.postDelayed(m_handlerTask, INTERVAL);
} else {
stopRepeatingTask();
}
}
}; private int mCount = -1;
/**
* 此处调用 接口
* @return
*/
private int doSomething() {
mCount = mCount + 1;
return mCount;
} void startRepeatingTask() {
m_handlerTask.run();
} /**
* 此处 结束
*/
void stopRepeatingTask() {
mTextView.setText("合成完成!");
mHandler.removeCallbacks(m_handlerTask);
}
方式二:AsyncTask
private TextView mTextView;
private ProgressBar mProgressBar;
private SynthesisProgressTask mSynthesisProgressTask; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mTextView = (TextView) this.findViewById(R.id.textView1);
mProgressBar = (ProgressBar) this.findViewById(R.id.progressBar2);
mSynthesisProgressTask = new SynthesisProgressTask(mProgressBar, mTextView);
mSynthesisProgressTask.execute("url");
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} private class SynthesisProgressTask extends AsyncTask<String, Integer, Integer> {
private static final int ALL_MEDIA_COUNT = 10;
private boolean isSynthesisFinished = false;
private ProgressBar mInnerProgressBar;
private TextView mInnerTextView; public SynthesisProgressTask(ProgressBar progressBar, TextView textView) {
this.mInnerProgressBar = progressBar;
this.mInnerTextView = textView;
} @Override
protected void onPreExecute() {
super.onPreExecute();
} @Override
protected Integer doInBackground(String... params) {
int i = -1;
while (!isSynthesisFinished) {
synchronized (this) {
i = i + 1;
if (i == ALL_MEDIA_COUNT) {
isSynthesisFinished = true;
}
publishProgress((int) ((i / (float) ALL_MEDIA_COUNT) * 100));
try {
wait(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return i;
} @Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
mInnerTextView.setText("已完成!");
} @Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
System.out.println("onSynth onProgress : " + values[0]);
mInnerProgressBar.setProgress(values[0]);
mInnerTextView.setText(values[0] + "%");
} }
android 定时请求(两种实现方式)的更多相关文章
- cron 定时任两种配置方式
第一种:xml文件方式 <bean id="commonTimer" class="com.course.wx.timer.CommonTimer"> ...
- PHP+ajax聊天室源码!支持长轮循跟定时请求两种
var lastID = "1";//声明上次取回的消息的ID var isposted = false; var mGetTime;//设置setTimeout的返回值 // ...
- Oozie与Coordinator调度讲解及系统时区配置与定时触发两种配置方式
1:修改本地linux时区 查看时区 - 号代表西 + 号 代表东 北京时间是东八区 设置时区的配置文件所在位置 cd /usr/share/zoneinfo/ 选择以亚洲的上海 的时区为基址 删除 ...
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- Android 常用UI控件之TabHost(1)TabHost的两种布局方式
TabHost是Android中的tab组件. TabHost布局文件的基本结构 TabHost下有个layout,这个layout中有TabWidget与FrameLayout.TabWidget是 ...
- android环境下两种md5加密方式
在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来.虽然md5加密经常用,但是md5的加密原理我还真说不上来,对md ...
- Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。
原文:Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式. Android Activity 的四种启动模 ...
- Xamarin Android Fragment的两种加载方式
android Fragment的重点: 3.0版本后引入,即minSdk要大于11 Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套的Fra ...
随机推荐
- 自定义元素–为你的HTML代码定义新元素
注意:这篇文章介绍的 API 尚未完全标准化,并且仍在变动中,在项目中使用这些实验性 API 时请务必谨慎. 引言 现在的 web 严重缺乏表达能力.你只要瞧一眼“现代”的 web 应用,比如 GMa ...
- 安卓天天练练(十一)用list绑数据
之前在练练ListView的时候就有个 BaseAdapter ba = new BaseAdapter() { 用Adapter来绑数据的方法,该方法中 LinearLayout ll=new Li ...
- vim文本编辑器的总结
说起文本编辑器,在下就不得不说vim这个老古董了,说老吧,但也是老当益壮,至今还是有不少拥护者.的确,vim很实用,在下就先列出vi的优点吧. 1.如果精通了vim,就可以省去鼠标了. 2.vim是跨 ...
- 关于IN-LIST迭代
IN-list iterator (IN-list迭代) 字段有索引,in里有多少个值就执行多少次索引扫描.不管值是否在字段里存在~ SQL> create table t1 as select ...
- 【转】Android--UI之ProgressBar--不错
原文网址:http://www.cnblogs.com/plokmju/p/android_progressbar.html 前言 开门见山,开篇明意.这篇博客主要讲解一下Android中Progre ...
- RC滤波器
1.一阶RC低通滤波器 RC低通滤波器的电路及其幅频.相频特性如下图所示,输入电压为ex,输出电压为ey 其中ζ=RC,截止频率f=1/2πRC. 2.一阶RC高通滤波器 其中ζ=RC,截止频率f=1 ...
- java---Unicode-字符转换器
实现一个字符(包括汉字)的简单互相转换: package cn.hncu.gui2; import java.awt.Button; import java.awt.Color; import jav ...
- 【索引】UML学习笔记
行为图 交互图 交互概览图 时间图 顺序图 通信图 活动图 状态及图 用例图 结构图 包图 类图 对象图 组件图 部署图 组合结构图
- Python - 元组(tuple) 详解 及 代码
元组(tuple) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/17290967 元组是存放任意元素集合,不能修 ...
- WinForm中关于控件焦点的问题
方法一: 在打开一个窗体时,我们往往需要设置焦点让光标出现在我们希望它出现的位置上. 这时我们可以在窗体的Activated事件中设置焦点 例如我们希望光标在打开窗体的时候出现在textBox1上,我 ...