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

最终效果:

原文地址:https://www.cnblogs.com/qlky/p/7236513.html