方式一: 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 定时请求(两种实现方式)的更多相关文章

  1. cron 定时任两种配置方式

    第一种:xml文件方式 <bean id="commonTimer" class="com.course.wx.timer.CommonTimer"> ...

  2. PHP+ajax聊天室源码!支持长轮循跟定时请求两种

      var lastID = "1";//声明上次取回的消息的ID var isposted = false; var mGetTime;//设置setTimeout的返回值 // ...

  3. Oozie与Coordinator调度讲解及系统时区配置与定时触发两种配置方式

    1:修改本地linux时区 查看时区 - 号代表西  + 号 代表东 北京时间是东八区 设置时区的配置文件所在位置 cd /usr/share/zoneinfo/ 选择以亚洲的上海 的时区为基址 删除 ...

  4. kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式

    今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...

  5. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  6. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  7. Android 常用UI控件之TabHost(1)TabHost的两种布局方式

    TabHost是Android中的tab组件. TabHost布局文件的基本结构 TabHost下有个layout,这个layout中有TabWidget与FrameLayout.TabWidget是 ...

  8. android环境下两种md5加密方式

    在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来.虽然md5加密经常用,但是md5的加密原理我还真说不上来,对md ...

  9. Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。

    原文:Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式. Android Activity 的四种启动模 ...

  10. Xamarin Android Fragment的两种加载方式

    android Fragment的重点: 3.0版本后引入,即minSdk要大于11 Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套的Fra ...

随机推荐

  1. c++ new带括号和不带括号

    在new对象的时候有加上(),有不加(),不知道这个到底是什么区别?比如:CBase *base = new CDerived();CBase *base = new CDeviced; 很多人都说, ...

  2. 14.6.3.3 Making the Buffer Pool Scan Resistant

    14.6.3.3 Making the Buffer Pool Scan Resistant 相比使用一个严格的LRU算法,InnoDB 使用一个技术来最小化数据总量 带入到buffer pool 而 ...

  3. Linux数据备份

    今天需要用到备份网站,写了个脚本,备份了mysql和redis数据. #!/bin/bash BACKDIR="/home/tan/getll_backup" if [ ! -d ...

  4. android 自动化(1)

    学习android自动化测试要感谢一个朋友耐心的指导 环境搭建:(需要java JDK 以及android SDK) JDK:http://www.oracle.com/technetwork/jav ...

  5. JQuery中trim函数的具体实现代码

    由于Javascript 1.8.1 之前的版本,没有内置 trim 函数,所以 JQuery 对它有自己的实现.不同的JQuery版本,trim函数的实现也不尽相同. 阅读本文需要掌握正则表达式用法 ...

  6. cobbler常见问题

    http://@@http_server@@/cblr/links/CentOS-6.4-x86_64 cobbler cblr/svc 四.配置文件 cobbler有许多的配置文件,但是只有少部分基 ...

  7. 600字读懂 Git

    译注:来自 Hacker School 的 Mary Rose Cook 实现了一个纯 JavaScript 写就的 Git:Gitlet,包含了最主要的一些命令.这个项目一是为了了解 Git 内部原 ...

  8. 初学scala2——case class

    case class,样例类,有人也叫条件类. 例如: case class Person(name:String, age:Int) 好用之处: 1.新建类实例不用new Person(..),直接 ...

  9. UVaLive4043 UVa1411 Ants 巨人与鬼

    题意:给出平面上n个白点n个黑点,要求两两配对,且配对所连线段没有交点. 法一:暴力 随机一个初始方案,枚举任意两条线段如果有交点就改一下. 效率其实挺好的. 法二:二分图最佳完美匹配 显然没有交点的 ...

  10. enum类型被intent所携带时需要注意的地方

    一般我们在Activity之间传递对象时多用Parcelable.比如写一个class,在这个class上标明implements Parcelable并实现接口就可以用Intent.putExtra ...