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 ...
随机推荐
- ZooKeeper系列之八:ZooKeeper的简单操作
http://blog.csdn.net/shenlan211314/article/details/6187035 1 )使用 ls 命令来查看当前 ZooKeeper 中所包含的内容: [zk: ...
- Energy Minimization
zoj2539:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2539 题意:公式第一项只要当xi=0时才会有作用,第二项只 ...
- Asterix and Obelix
uva10246:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&am ...
- wpf 自定义依赖性属性 作用之一 对数据绑定的支持
依赖属性:定义,声明,注册 依赖属性,在数据绑定中,数据绑定,分为源对象(数据源)和目标对象(显示数据). 只有源对象为依赖对象,属性为依赖属性时,该属性才会在属性发生变化时,通知目标对象进行数据更改 ...
- 详解Linux配置iSCSI方法
iSCSI技术是在2001年初由IBM及Cisco联合制定的技术,在2003年5月微软在 Windows 2003中 开始自己正式支持iSCSI微软此举很大程度上的推动了iSCSI技术的发展.下面为大 ...
- 数据结构(主席树):HZOI 2016 采花
[题目描述] 给定一个长度为n,包含c种颜色的序列,有m个询问,每次给出两个数l,r,表示询问区间[l,r]中有多少种颜色的出现次数不少于2次. 本题强制在线,对输入的l,r进行了加密,解密方法为: ...
- HDOJ 2011 多项式求和
Problem Description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + - 现在请你求出该多项式的前n项的和. Input 输入数据由2行组成, ...
- HDOJ 1312 (POJ 1979) Red and Black
Problem Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...
- Android学习笔记(四)深入探讨Activity
在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...