Android初级教程 - 常用延时操作方式

设置一个延时时间(1000),以一定的频率(3000)来执行某项任务。

常用延时方式

  • 适用于Java、Android

1.Thread+sleep 最常见操作

   new Thread() {
            @Override
            public void run() {
                super.run();
                //休眠3秒
                Thread.sleep(3000);
                //要执行的操作
              }
   }.start();

 

2.TimerTask + Timer 定时器+定时任务

public void start(View view) {
    // 创建任务
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
           //操作逻辑写此处
        }
    };

    //创建定时器
    timer = new Timer();
    //参数说明:task 任务, delay延时, period间隔
    timer.scheduleAtFixedRate(timerTask, 1000, 3000);
    //备用:timer.schedule(timerTask , 3000);
}

public void cancle(View view) {
    timer.cancel();
    timer=null;
}

3.synchronized 让当前线程等待延时 时长

synchronized (Thread.currentThread()) {
            try {
                Thread.currentThread().wait(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
       }
  • 仅适用于Andorid(因以下方法为Android独有方法)

1.Handler的postDelayed方法

    //3秒后执行Runnable中的run方法  
    Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
              //要执行的操作
            }
     }, 3000);


2.countDownTimer 

      countDownTimer = new CountDownTimer(3000, 1000){

            @Override
            public void onTick(long millisUntilFinished) {
                //倒计时中可通过此方式获取当前的秒数:millisUntilFinished/1000 + "秒"
            }

            @Override
            public void onFinish() {
                 //倒计时完毕之后的处理逻辑
            }
        };

        countDownTimer.start();

以下为好多年前的一些老东西,回头一看自己都不知道当时写的什么玩意儿,诸位可以忽略,我当个笔记 ~~


1.handler定时

关键 是一个思路。发一个延时消息后。在处理该消息完成,接着给自己发延时消息。

    private Handler handler=new Handler(){
        public void handleMessage(android.os.Message msg) {
            System.out.println("---清理进程");
            handler.removeMessages(msg.what);
            //再发送消息
            Message message = new Message();
            message.what=1;
            handler.sendMessageDelayed(message, 2000);
        };
    };

    public void start(View view) {
        Message message = new Message();
        message.what=1;
        handler.sendMessageDelayed(message, 1000);
    }

    public void cancle(View view) {
        //删除消息与处理方法
        handler.removeCallbacksAndMessages(null);
    }

2.定时器(线程池) 新闻客户端

public void start(View view) {
        //同时加载 多张图片 管理线程
        // 创建 线程池
        ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
        // 定时执行
        // ses.scheduleAtFixedRate(command,一段代码 initialDelay,等待 period,间隔
        // unit时间单位);
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("定时代码");

            }
        };
        scheduleAtFixedRate = ses.scheduleAtFixedRate(runnable, 1, 2, TimeUnit.SECONDS);
    }

    public void cancle(View view) {
        scheduleAtFixedRate.cancel(true);
    }

3.全局定时服务 AlarmManager

a.由系统创建的服务 开销小b.执行一个操作 使用PendingIntentc.要求写一个广播接收者处理 定时任务

public void start(View view) {

    // 使用一个已存在的级别的定时器
    // 获取定时服务

    am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    // 设定时间
    // am.setRepeating(AlarmManager.RTC, triggerAtMillis 等待时间 intervalMillis
    // 间隔, operation 操作)
    // 创建一个广播
    Intent intent = new Intent();
    intent.setAction("com.ithiema.repeat");// 发送信息 要求广播接收者执行 定时任务
    // 创建一个将来的意图
    broadcast = PendingIntent.getBroadcast(this, 0, intent, 0);
    //ELAPSED流失 以手机开机时间点为0
    //RTC :以 UTC 1970
    am.setRepeating(AlarmManager.RTC, System.currentTimeMillis()+10, 2000, broadcast);

}

public void cancle(View view) {
    am.cancel(broadcast);
}

处理事件

public class CommondReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("---定时操作");
    }
}

    
        
            
        
    

清理工具

重用率比较高的代码要求进行抽取

public class ProcessUtils {

/**
 *方法 清理
 *@param context
 */
public static void clearAllProcess(Context context)
{
    // 获取进程管理者
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    // 运行的进程
    List runningAppProcesses = am.getRunningAppProcesses();
    for (RunningAppProcessInfo item : runningAppProcesses) {
        if (!TextUtils.equals(item.processName,context. getPackageName())) {
            // 逐个关闭进程
            am.killBackgroundProcesses(item.processName);
        }
    }
  }
}

你可能感兴趣的:(#,项目开发知识点归纳,#,必备初级知识点)