如何以串行时间方式执行三个不同的任务?

Posted

技术标签:

【中文标题】如何以串行时间方式执行三个不同的任务?【英文标题】:how to execute three different task with serial time manner? 【发布时间】:2017-09-22 07:22:07 【问题描述】:

我需要执行三个不同的任务,每个任务的执行时间应该是 1000 毫秒、2000 毫秒、3000 毫秒。

你能告诉我更好的实现方式吗? 1.处理程序 2.定时任务 3. 线程 4.ExecutorServices等

【问题讨论】:

【参考方案1】:

我正在使用处理程序

处理程序处理程序 = 新处理程序(); handler.postDelayed(new Runnable()

        @Override
        public void run() 
            // TODO Auto-generated method stub

        
    , 1000);

    handler.postDelayed(new Runnable() 

        @Override
        public void run() 
            // TODO Auto-generated method stub

        
    , 2000);
    handler.postDelayed(new Runnable() 

        @Override
        public void run() 
            // TODO Auto-generated method stub

        
    , 3000);

【讨论】:

【参考方案2】:

您可以使用AlarmManager来执行操作:

AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this, AlarmReceiver.class);
alarmIntent.putExtra("Activity",1);
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, pendingIntent);
alarmIntent = new Intent(this, AlarmReceiver.class);
alarmIntent.putExtra("Activity",2);
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 2000, pendingIntent);
alarmIntent = new Intent(this, AlarmReceiver.class);
alarmIntent.putExtra("Activity",3);
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);

AlarmReceiver 类

public class AlarmReceiver extends BroadcastReceiver 
    @Override
    public void onReceive(Context context, Intent intent) 
        Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show();
        int extra = intent.getExtra("Activity");
        switch(extra) 
              case 1:
                     //start 1st activity

              case 2:
                     //start 2nd activity

              case 3:
                     //start 3rd activity
        

    

【讨论】:

它不会影响应用程序的性能,但如果屏幕进入睡眠状态,它会唤醒屏幕。因此,如果您没有这样的要求,那么您可以使用正常的待处理意图

以上是关于如何以串行时间方式执行三个不同的任务?的主要内容,如果未能解决你的问题,请参考以下文章

CompletableFuture异步编程

上周回顾

Android 线程

Spring调度定时任务的方式

GCD 中的并发队列与串行队列

如何在同一线程上调度异步以进行串行处理