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

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

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

【问题讨论】:

    标签: java android multithreading threadpool


    【解决方案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
              }
      
          }
      }
      

      【讨论】:

      • 它不会影响应用程序的性能,但如果屏幕进入睡眠状态,它会唤醒屏幕。因此,如果您没有这样的要求,那么您可以使用正常的待处理意图
      猜你喜欢
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 2021-12-28
      • 2015-11-05
      相关资源
      最近更新 更多