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 minutesprivate 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);};};@Overrideprotected 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();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}Runnable m_handlerTask = new Runnable() {@Overridepublic 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;@Overrideprotected 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");}@Overridepublic 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;}@Overrideprotected void onPreExecute() {super.onPreExecute();}@Overrideprotected 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;}@Overrideprotected void onPostExecute(Integer result) {super.onPostExecute(result);mInnerTextView.setText("已完成!");}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);System.out.println("onSynth onProgress : " + values[0]);mInnerProgressBar.setProgress(values[0]);mInnerTextView.setText(values[0] + "%");}}
转载于:https://www.cnblogs.com/nmj1986/p/3175129.html
android 定时请求(两种实现方式)相关推荐
- android启动服务的生命周期,Android Service的两种启动方式以及生命周期
Service的两种启动方式: 1.startService 2.bindService 注意: .在Android 5.0之后google出于安全的角度禁止了隐式声明Intent来启动Service ...
- 【环信集成指北】Android SDK 的两种导入方式
环信AndroidSDK官网文档提供了两种导入方式:线上gradle远程连接导入和本地导入,线上导入方便快捷,本地导入较为灵活. 一.线上gradle远程连接导入 线上导入方便快捷,直接使用环信最新版 ...
- Android service的两种使用方式bindService和startService使用方式
服务与多线程的区别: 服务仍然是运行在主线程中,而Thread则是真正的开启了一个新的线程来执行先关操作. 那为什么要用服务呢,初步理解是服务是为了更好地管理线程.试想,当我们在某一个activity ...
- Android中启动一个服务,Android服务的两种启动方式
前言:Service是Android的四大组件之一,也是可执行的程序.服务是Android中实现程序后台运行的解决方案,非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.Service的启动 ...
- Android Studio Gradle两种更新方式
第一种.Android Studio自动更新 第一步:修改gradle版本 修改项目根目录/gradle/wrapper/gradle-wrapper.properties最后一行的地址: distr ...
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式...
2019独角兽企业重金招聘Python工程师标准>>> 今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小 ...
- android项目两种构建方式的整合(Eclipse/idea和Android Studio)
android的两种构建方式 目前android主要有两种构建方式,一种基于ant(传统的),另一种是13年Google/IO上新推出基于Gralde的构建(Android Studio).从sdk的 ...
- android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...
Android学习笔记-保存文件(Saving Files) Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "externa ...
- Android方法的概括,Android_Android中startService基本使用方法概述,Android中有两种主要方式使用Ser - phpStudy...
Android中startService基本使用方法概述 Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindServi ...
- android密码dakay,安卓中按钮点击事件onClick的两种实现方式
很多的语言都有一些共同的特点,比如OnClick这个东西,可能我们能在js中见到,当然在安卓中也有,可能其他的编程语言也会有这个东西,刚好今天学了这个玩意在安卓中的写法. 点击事件大多用在Button ...
最新文章
- c#加粗代码_RichTextBox,怎么用c#代码根据Index和Length指定的范围的内容进行变色或加粗处理?...
- 【Prometheus】 Prometheus 入门到实战搭建监控系统
- float数据类型研究,发现其能显示的有效数字极为有限
- 编程打开Windows服务控制管理器
- Android基础总结(八)Service
- react学习(28)---react挂载图
- 工具类:获取 spring 容器中 bean
- Qt 翻译文件的加载
- Java基础学习总结(114)——System之系统变量和环境变量
- ubuntu16.04卸载firefox,然后再次安装firefox
- [译]CSS3实现柱状图的3D立体动画效果
- 字符串 - KMP模式匹配
- 逻辑斯谛(Logistic)回归、参数估计教程
- linux 鼠标光标由箭头变成十字形恢复方法
- js 验证联系方式 手机号码及座机号码
- 无法远程连接到计算机 虚拟内存,远程桌面连接显示内存不足怎么破?
- 联想ThinkPad升级BIOS和EC新手教程
- flutter | 悬浮窗解决方案 flutter_floating
- 机器学习--泛化能力
- 规则在自然语言处理领域的重要地位
热门文章
- sqlserver 数据多行以逗号分隔成一行
- DBeaver连接SqlServer报“The server selected protocol version TLS10 is not accepted by client prefere”的错误
- SetConsoleTextAttribute 设置Windows控制台字体背景颜色(转载)
- MySQL IS NULL(IS NOT NULL)使用索引分析
- VS2015 ASSERT(false)直接退出不弹出Assert failed对话框的解决方法
- Failed to start bean ‘documentationPluginsBootstrapper‘;
- 软件质量管理体系 type:pdf_制造型企业构建完整的质量管理体系的思路要点
- 人脸图像特征提取方法(HOG、Dlib、CNN)简述
- 计算机机房使用多大的光纤引入,弱电施工如何确定光纤使用的芯数
- php java node 并发,Node、PHP、Java 和 Go 服务端 I/O 性能PK