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;
        }
    }

    最终效果:

  • 相关阅读:
    语音识别算法阅读之CTC
    语音识别模型阅读之CLDNN
    声纹识别算法阅读之self-attentive x-vector
    Git链接两个远程仓库
    tortoisegit提交不到远程库问题解决记录
    安装 Git 命令之后,本地的工作区中的文件没有小图标解决办法
    .NET CLS(Common Language System)简介
    .NET CTS(Common Type System)简介
    C# 中间语言
    .NET 程序执行流程
  • 原文地址:https://www.cnblogs.com/qlky/p/7236513.html
Copyright © 2011-2022 走看看