方法一:使用Handler+Runnable

public class CountDownActivity extends AppCompatActivity {    private static final String TAG = "CountDownActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_count_down);        testCountDown();    }    private void testCountDown() {        Log.e(TAG, "testCountDown: start  currentTimeMillis = "+System.currentTimeMillis() );        countDownHandler.postDelayed(countDownRunnable,3000);    }    Handler countDownHandler = new Handler();    Runnable countDownRunnable = new Runnable() {        @Override        public void run() {            Toast.makeText(context,"时间到",Toast.LENGTH_LONG).show();            Log.e(TAG, "testCountDown: end  currentTimeMillis = "+System.currentTimeMillis() );        }    };    @Override    protected void onDestroy() {        super.onDestroy();        if(countDownHandler != null)        {            //移除回调,避免内存泄漏            countDownHandler.removeCallbacks(countDownRunnable);        }    }}

相差10毫秒左右

方法二: Timer+TimerTask

    private void testCountDown() {        final Timer timer = new Timer();        TimerTask timerTask = new TimerTask() {            @Override            public void run() {                Log.e(TAG, "testCountDown: end  currentTimeMillis = "+System.currentTimeMillis() );                Log.e(TAG, "run: "+Thread.currentThread() );                timer.cancel();//                Toast.makeText(context,"时间到",Toast.LENGTH_LONG).show(); //time线程不能改变UI//                startActivity(MainActivity.class);//不能更新UI,但是可以启动activity            }        };        Log.e(TAG, "testCountDown: start  currentTimeMillis = "+System.currentTimeMillis() );        timer.schedule(timerTask,3000);    }

`虽然相差0毫秒,但是Timer并不能保证准时执行任务的,需要看前面的任务有没有执行完。

方法三:CountDownTimer

    private void testCountDown(){        CountDownTimer countDownTimer = new CountDownTimer(3000,1000) {            @Override            public void onTick(long millisUntilFinished) {                Log.e(TAG, "onTick: "+ millisUntilFinished);            }            @Override            public void onFinish() {                Log.e(TAG, "onFinish: " );            }        };        countDownTimer.start();//        countDownTimer.cancel();    }


这个还不错

更多相关文章

  1. 地图测试
  2. Androidstudio实现手机摇一摇功能
  3. android handler和message的常用方法
  4. Android通过广播接收者调用服务内方法
  5. 文件File path与content:// Uri的相互转换
  6. android 一步一步创建jni示例
  7. Telephony单元测试分析
  8. Android(安卓)开启关闭软键盘
  9. Android数据库升级、降级、创建(onCreate() onUpgrade() onDowng

随机推荐

  1. DownloadManager 文件下载
  2. android 模拟器中找不到程序
  3. Android电视关闭效果
  4. android用MediaCodeC将opengl绘制内容录
  5. Android耳机按键监听
  6. Kotlin Android(安卓)环境搭建
  7. 背景图片颜色渐变
  8. Android自定义view四手势缩放移动的Image
  9. Android:如何关/启 自动同步(Auto Sync )和
  10. Android 将单位dip转换为px