Android 获取时间实时更新UI

第一种:使用Handler获取

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        time= (TextView) findViewById(R.id.time);
        new TimeHandler().start();
//        getTime()//第二种方法
    }

    class TimeHandler extends Thread{
        @Override
        public void run() {
            super.run();
            do{
                try {
                    Thread.sleep(1000);
                    Message message=new Message();
                    message.arg1=5;
                    handler.sendMessage(message);

                }
                catch (Exception e){

                }
            }while (true);
        }
    }

    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    long sysTime = System.currentTimeMillis();
                    CharSequence sysTimeStr = DateFormat.format("hh:mm:ss", sysTime);
                    time.setText(sysTimeStr); //更新时间
                    break;
                default:
                   break;

            }
        }
    };

    /**
     * 第二种方式 使用Handler
     *
     */
    private Handler handlers=new Handler();

    private void getTime(){
        Timer timer=new Timer();

        TimerTask timerTask=new TimerTask() {
            @Override
            public void run() {
                SimpleDateFormat format=new SimpleDateFormat("HH:mm");
                final String times=format.format(new Date());
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        time.setText(times);

                    }
                });
            }
        };
        timer.schedule(timerTask,0,1000);
    }

第二种:使用服务

 public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        init();
        //每隔一秒发送一次广播
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                sendTimeChangedBroadcast();
            }
        },1000,1000);
    }

    private void init() {
        timer=new Timer();
        sdf = new SimpleDateFormat("yyyy年MM月dd日 "+"hh:mm:ss");
        timeIntent = new Intent();
        bundle = new Bundle();
    }

    /**
     * 发送广播,通知UI层时间已改变
     */
    private void sendTimeChangedBroadcast(){
        bundle.putString("time", getTime());
        timeIntent.putExtras(bundle);
        timeIntent.setAction(TimeServiceActivity.TIME_CHANGED_ACTION);
        //发送广播,通知UI层时间改变了
        sendBroadcast(timeIntent);
    }
    /**
     * 获取最新系统时间
     * @return
     */
    private String getTime(){
        return sdf.format(new Date());
    }

Demo下载

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实时获取更新系统时间,可以使用 `Handler` 和 `Runnable`,在 `Runnable` 中获取当前时间并更新 UI,然后使用 `Handler` 定时调用这个 `Runnable`。 以下是一个每秒钟更新一次系统时间的示例代码: ```java import android.os.Bundle; import android.os.Handler; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class MainActivity extends AppCompatActivity { private Handler mHandler = new Handler(); private TextView mTextView; private Runnable mUpdateTimeTask = new Runnable() { public void run() { // 获取当前时间 Date date = new Date(); // 设置时间格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 格式化时间为字符串 String currentTime = sdf.format(date); // 将时间显示到 TextView 上 mTextView.setText(currentTime); // 每秒钟更新一次 mHandler.postDelayed(this, 1000); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = findViewById(R.id.textView); // 开始更新时间 mHandler.post(mUpdateTimeTask); } @Override protected void onDestroy() { super.onDestroy(); // 停止更新时间 mHandler.removeCallbacks(mUpdateTimeTask); } } ``` 在上述代码中,我们首先定义了一个 `mUpdateTimeTask` 的 `Runnable`,它会在每次运行时获取当前时间并更新 UI,并使用 `Handler` 定时调用自己,以实现每秒钟更新一次的效果。然后在 `onCreate` 方法中启动这个 `Runnable`,在 `onDestroy` 方法中停止它。最后,将显示时间的 `TextView` 赋值给 `mTextView` 变量,以便在 `Runnable` 中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值