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

    最终效果:

  • 相关阅读:
    慕课网-安卓工程师初养成-2-6 Java中的数据类型
    慕课网-安卓工程师初养成-2-5 如何命名Java变量
    慕课网-安卓工程师初养成-2-4 变量是什么
    慕课网-安卓工程师初养成-2-3 练习题
    慕课网-安卓工程师初养成-2-2 认识Java标识符
    慕课网-安卓工程师初养成-2-1 Java中的关键字
    慕课网-安卓工程师初养成-1-10 练习题
    Java编程——万年历
    排队购票
    猴子爬山
  • 原文地址:https://www.cnblogs.com/qlky/p/7236513.html
Copyright © 2011-2022 走看看