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日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度