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 ...
随机推荐
- Android假退出不是流氓行为
转自Android假退出不是流氓行为 关于Android程序的退出,目前我们没有再用System.exit(0)或killProcess的机制而是直接用Activity.finish假退出了.因此在内 ...
- Delphi版的完成端口控件
http://download.csdn.net/user/mike1234567890/uploads/2
- 在eclipse中安装activiti插件
最近在学习activiti,先学习安装插件吧. 单击help->Install new Software 然后添加资源 name:activiti location:http://activit ...
- C# 读写INI 文件
INI 格式: [Section1] KeyWord1 = Value1 KeyWord2 = Value2 ... [Section2] KeyWord3 = Value3 KeyWord4 = V ...
- Duplex Services (Msdn)
Duplex Services from msdn A duplex service contract is a message exchange pattern in which both endp ...
- mysql排序,可以对统计的数据进行排序
sql SELECT a.*,b.name as address_name,b.tel as address_tel,b.province as address_province,b.city as ...
- mysql中的timestamp类型时间比较:unix_timestamp函数
在mysql中,某字段的类型设置为了timestamp,那么我们现在希望取出指定时间段的记录,该如何做呢? 在php中有time()和strtotime()来进行日期和时间戳的格式化,而在mysql中 ...
- winphone 开发学习笔记(1)
学习了winphone task 1.首先根据自己电脑下载sdk,,,win 7和win 8的Sdk安装包不一样, http://www.microsoft.com/en-hk/download/de ...
- ORA-12541: TNS: 无监听程序 怎么解决
ORA-12541: TNS: 无监听程序 怎么解决? 刚学 oracle ORA-12541: TNS怎么回事,已经打开了所有的服务 fzxs 2008-3-14 下载知道客户端,10分钟内有问必答 ...
- 另一份Java应用调优指南之-前菜
每一次成功的调优,都会诞生又一份的调优指南. 一些必须写在前面的军规,虽然与Java应用的调优没直接关联,但是测试同学经常不留神的地方. 1 独占你的测试机器 包括跑JMeter的那些机器. &quo ...