并行倒数计时器

Parallel Countdown Timers

我怀疑同时使用多个倒数计时器的最佳方式是什么。 我已经在这样做了(在 UI 线程上)并且我正在更新许多组件(Textview、带数据的 rv、imageviews)。它有效,但我注意到 UI 在我想要切换我正在显示的“警报”时变得有点迟钝。

我还想在后台发出此警报 运行,并显示剩余时间的通知,我认为我永远无法用我制作的 UI Thread 东西做到这一点。

这样做的正确方法是什么?

来自任何 service 或来自任何 intentservice 或来自 asynctask 你可以有计时器线程(即你的情况下的倒计时计时器),如:

public void Timer()
{
    new Thread(new Runnable()
    {
        public void run()
        {
            while (IsOnGoing)
            {
                try
                {
                    TimeUnit.SECONDS.sleep(1);
                    seconds++;

                    int hour = seconds/3600;
                    int remaining = seconds%3600;

                    int minutes = remaining/60;
                    int seconds = remaining%60;

                    String hourString = (hour<10 ? "0" : "")+hour;
                    String minutesString = (minutes<10 ? "0" : "")+minutes;
                    String secondsString = (seconds<10 ? "0" : "")+seconds;

                    String InCallDuration = hourString + " : " + minutesString + " : " + secondsString;

                    Intent intent = new Intent("ticks");
                    intent.setPackage(getPackageName());
                    intent.putExtra("InCallDuration", InCallDuration);
                    getApplicationContext().sendBroadcast(intent);

                    Log.d("InCallService :", "InCallDuration"+ InCallDuration+".. \n");
                }
                catch (InterruptedException e)
                {
                    Log.d("CallStateService :", "InterruptedException.. \n");
                    e.printStackTrace();
                }
            }
        }
    }).start();

}

如果您注意到上面代码中的一行(如下所述):

getApplicationContext().sendBroadcast(intent);

local broadcast 发送到同一个应用程序。 (即仅从我们的应用向我们的应用发送广播。)

Register it in any activity like :

IntentFilter filterTicks = new IntentFilter("ticks");
registerReceiver(secondsBroadcastReceiver, filterTicks);

Un-register in the same activity once tasks are finished / onDestroy / OnPause :

unregisterReceiver(secondsBroadcastReceiver);

How to use :

您已经注意到上面代码中的 broadcastreceiver,例如:

private BroadcastReceiver secondsBroadcastReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        String InCallDuration = intent.getStringExtra("InCallDuration");
        Log.d("CallActivity :", "Received InCallDuration:" + InCallDuration + ".. \n");
        CallTime.setText(InCallDuration);
    }
};
  1. 您可以从中设置/更改 UI textview 文本多次 它在背景中滴答作响。
  2. 我们只需要在每次报价后发送广播
  3. 其适当的接收者接收并更新UI(我们需要设置它)
  4. 只要它保持在那里,它就会发送广播和接收。
  5. 你只需要更换定时器方法,因为你的滴答声会减少,现在我把它留给你编程休息。