http://blog.csdn.net/u013724061/article/details/38642049

最终效果:

动态显示当前时间和电量

思路:

首先在Activity里用内部类定义两种广播,一种是系统广播(电池),另一种是自定义广播。

private class SimpleBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
int currLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, ); //当前电量
int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE, ); //总电量
int percent = currLevel * / total;
updateG(percent);
Log.i(TAG, "battery: " + percent + "%");
}
} private class UpdateTimeReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); String dateStr = dateFormat.format(date);
String timeStr = timeFormat.format(date); tv_date.setText(dateStr + ":" + timeStr);//显示出日期
}
}

在OnResume中注册广播,OnPause中移除 (文章中有为什么不在onStart和onStop中的解释)

@Override
protected void onResume() {
super.onResume(); IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
simpleBroadcastReceiver = new SimpleBroadcastReceiver();
registerReceiver(simpleBroadcastReceiver, intentFilter); intentFilter = new IntentFilter("ACTION_UPDATE_TIME");
updateTimeReceiver = new UpdateTimeReceiver();
registerReceiver(updateTimeReceiver, intentFilter); Intent intent = new Intent(this,UpdateGService.class);
startService(intent);
} @Override
protected void onPause() {
super.onPause();
unregisterReceiver(simpleBroadcastReceiver);
unregisterReceiver(updateTimeReceiver);
Intent intent = new Intent(this,UpdateGService.class);
stopService(intent);
}

建立个service来处理动态更新

public class UpdateGService extends Service {

    @Override
public void onCreate() {
super.onCreate();
new Timer().scheduleAtFixedRate(new TimerTask() { @Override
public void run() {
Intent timeIntent = new Intent();
timeIntent.setAction("ACTION_UPDATE_TIME");//自定义Action
sendBroadcast(timeIntent); //发送广播
}
}, , ); //每隔1秒
} @Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}

最终效果:

Service 动态更新 UI的更多相关文章

  1. 在Android中实现service动态更新UI界面

    之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的.那么如何实现service动态更新UI界面呢?案例:通过service ...

  2. android中实现service动态更新UI界面

    案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务. 注册BroadcastReceiver 在主程序activity中注册一个Bro ...

  3. Android Handler传递参数动态更新UI界面demo

    package com.example.demo_test; import android.app.Activity; import android.os.Bundle; import android ...

  4. 动态更新UI的方式

    1. TimerTask 和 timer连用: 这里主要是实现倒计时, TimerTask 里面有方法runOnUiThread,在这个方法里面调用timer cancel()停止倒计时,同样更新UI ...

  5. Android UI:机智的远程动态更新策略

    问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有 ...

  6. Mono for android 如何动态添加View,线程内部如何更新UI.

    貌似所有设计到UI的程序原理都是一样的,子线程是不能够更新UI状态的,所以就必须使用UI自身或者第三方来更新UI. 如 在WinForm 中 就可以使用Control.Invoke(Action ac ...

  7. Service和广播联合更新UI的例子

    sa111111 于 2010-11-19 10:56 发表在 [Android实例] [复制链接] [只看楼主] [上一主题] [下一主题]   在Android中,异步更新UI,通常我们会选用Ha ...

  8. android 不能在子线程中更新ui的讨论和分析

    问题描写叙述 做过android开发基本都遇见过 ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是仅仅能在主线程中更改 ui.子线程要 ...

  9. 【用户交互】APP没有退出前台但改变系统属性如何实时更新UI?监听系统广播,让用户交互更舒心~

    前日,一小伙伴问我一个问题,说它解决了半天都没解决这个问题,截图如下: 大概楼主理解如下: 如果在应用中有一个判断wifi的开关和一个当前音量大小的seekbar以及一个获取当前电量多少的按钮,想知道 ...

随机推荐

  1. JFrame、JPanel 、Layout开发的简单例子

    写了Java这么久,居然发现想手写一个带网格袋布局的JFrame,还不记得怎么写,写了这么多代码真不敢说记得所有细节. 幸好,只要记清楚概念就能快速开发.首先,明确一下3种容器类的差别和用途: No. ...

  2. c++中的const和volatile知识自我总结

    学习了下c++中的const关键字,总结如下. 1.const限制一个变量不能修改其内容,如果强行修改的话,如下面代码这样子,编译就会报错,“表达式必须是可修改的左值”. int main() { c ...

  3. POJ 2725

    #include <iostream> #include <string> #include <algorithm> #define MAXN 400005 usi ...

  4. 3DMax——基础

    1.首次打开3DMAX设置单位: 自定义→单位设置→①系统单位设置→1单位=1.0毫米:②公制→毫米 注:室内单位为毫米,室外单位为米 2.从CAD导出可以导入到3DMAX的文件: 选中要导出的部分→ ...

  5. (转)python类:magic魔术方法

    原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...

  6. ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context

    封装Redis发布订阅时,SUB时,又想探测具体Channel的状态,于是执行PUBSUB CHNNALES命令,报 ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / ...

  7. Mac 下安装.NET Core 与 CLI

    .NET Foundation:https://github.com/dotnet/home .NET Core:https://github.com/dotnet/coreclr CLI:https ...

  8. PHP多进程系列笔记(二)

    上一篇文章讲解了pcntl_fork和pcntl_wait两个函数的使用,本篇继续讲解PHP多进程相关新知识. 僵尸(zombie)进程 这里说下僵尸进程: 僵尸进程是指的父进程已经退出,而该进程de ...

  9. Vue笔记:封装 axios 为插件使用

    前言 自从Vue2.0推荐大家使用 axios 开始,axios 被越来越多的人所了解.使用axios发起一个请求对大家来说是比较简单的事情,但是axios没有进行封装复用,项目越来越大,引起的代码冗 ...

  10. 配置Zookeper

    在整个的codis架构之中,codis-proxy将作为所有的codis-server的对外的代理,而在整个的处理之中,codis-proxy所保存的数据一定是所有的codis-server的信息,那 ...