zoukankan      html  css  js  c++  java
  • Service 动态更新 UI

    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, 0);  //当前电量
                int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE,   1);      //总电量
                int percent = currLevel * 100 / 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); //发送广播
                }
            }, 0, 1000); //每隔1秒
        }
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }

    最终效果:

  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/qlky/p/7236513.html
Copyright © 2011-2022 走看看