2201_75804946 2023-04-22 19:42 采纳率: 55%
浏览 8
已结题

Chronometer持续运行

Android 使用Chronometer,但退出Chronometer所在的界面,Chronometer就会自动停止。
如何使Chronometer退出界面后仍在继续计时


 begin1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked){
    chronometer.start();// 开始计时
    chronometer.setBase(SystemClock.elapsedRealtime()-recordingTime);

    }
    if(!isChecked){
    chronometer.stop();// 停止计时
    recordingTime=SystemClock.elapsedRealtime()-chronometer.getBase();
    recordingTime1=recordingTime/1000;
    sprent= (float) (0.1*recordingTime1);
    }
  • 写回答

2条回答 默认 最新

  • 守时间的孤岛 2023-04-22 20:09
    关注

    该回答引用chatgpt:可能需要调整一下
    在Android中,当Activity退出时,所有的UI组件都会被销毁,这也包括Chronometer。如果希望Chronometer能够在退出当前Activity后继续计时,可以将其与Service绑定,然后在Service中进行计时。

    下面是一种实现方式:

    1.创建一个继承自Service的类MyService,并在该类中定义计时器:

    public class MyService extends Service {
        private Handler mHandler = new Handler();
        private long mStartTime;
        private Runnable mRunnable = new Runnable() {
            @Override
            public void run() {
                long millis = System.currentTimeMillis() - mStartTime;
                int seconds = (int) (millis / 1000);
                int minutes = seconds / 60;
                seconds = seconds % 60;
                String time = String.format("%02d:%02d", minutes, seconds);
                // 将计时器的值通过Broadcast发送给Activity
                Intent intent = new Intent("com.example.broadcast.CHANGE_TIME");
                intent.putExtra("time", time);
                sendBroadcast(intent);
                mHandler.postDelayed(this, 1000);
            }
        };
    
        @Override
        public void onCreate() {
            super.onCreate();
            mStartTime = System.currentTimeMillis();
            mHandler.postDelayed(mRunnable, 0);
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
    
    
    

    在Activity中启动MyService,并通过Broadcast接收计时器的值

    public class MainActivity extends AppCompatActivity {
        private Chronometer mChronometer;
        private TextView mTextView;
        private MyReceiver mReceiver;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mChronometer = findViewById(R.id.chronometer);
            mTextView = findViewById(R.id.text_view);
    
            // 启动Service
            Intent intent = new Intent(this, MyService.class);
            startService(intent);
    
            // 注册BroadcastReceiver
            mReceiver = new MyReceiver();
            IntentFilter filter = new IntentFilter();
            filter.addAction("com.example.broadcast.CHANGE_TIME");
            registerReceiver(mReceiver, filter);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            // 停止Service
            Intent intent = new Intent(this, MyService.class);
            stopService(intent);
            // 注销BroadcastReceiver
            unregisterReceiver(mReceiver);
        }
    
        private class MyReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                String time = intent.getStringExtra("time");
                mTextView.setText(time);
            }
        }
    }
    
    
    

    在上面的代码中,我们创建了一个继承自BroadcastReceiver的类MyReceiver,并在其中实现了onReceive方法。当Service发送的Broadcast被接收到时,onReceive方法就会被调用,然后我们可以将计时器的值更新到UI组件中。同时,在Activity销毁时,需要停止Service,并注销BroadcastReceiver

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?