在android中,有一些刷新处理选项,例如 Timer,TimerTask,ScheduledExecutorService,AlarmManager和Handler 。这是执行此操作的最佳方法。

是否有人检查上述方法的资源利用率?我在这里列出了上述方法的实现。

使用处理程序重复执行任务

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {

    public void run() {
        new MyScheduledTask.execute(param);
    }

}, TimeInterval);

使用计时器重复执行任务
timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {

    synchronized public void run() {
        new MyScheduledTask.execute(param);
        }

}}, 10000, 10000);

使用ScheduledExecutorService反复执行任务
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
  (new Runnable() {
     public void run() {
        new MyScheduledTask.execute(param);
     }
  }, 0, 10, TimeInterval);

将Timer与TimerTask一起使用可重复执行任务
Timer timer = new Timer();
timer.schedule(new UpdateTimeTask(),1, TimeInterval);
class UpdateTimeTask extends TimerTask {

    public void run()
       {
        new MyScheduledTask.execute(param);
       }
}

AlarmManager,用于执行计划的任务
public void setupTask(){

    // check task is scheduled or not
    boolean alarmUp = (PendingIntent.getBroadcast(this, 0,
            new Intent("YourPackageHere.AlarmReceiver"),
            PendingIntent.FLAG_NO_CREATE) != null);

    if (  !alarmUp) {
        Intent intent = new Intent("YourPackageHere.AlarmReceiver");
        intent.putExtra("activate", true);
        PendingIntent pendingIntent =
                    PendingIntent.getBroadcast(this, 0,
                  intent, PendingIntent.FLAG_UPDATE_CURRENT);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 1);
        calendar.set(Calendar.SECOND, 0);

        AlarmManager alarmManager =
                    (AlarmManager)
                    this.getSystemService(this.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                    calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
                    pendingIntent);

        calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 7);
        calendar.set(Calendar.MINUTE, 0);

        alarmManager = (AlarmManager)
                    this.getSystemService(this.ALARM_SERVICE);
        PendingIntent pendingIntent2 =
                    PendingIntent.getBroadcast(this, 1,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                    calendar.getTimeInMillis(),
                    AlarmManager.INTERVAL_DAY, pendingIntent2);

    }

}

AlarmManager类
public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    if (intent.hasExtra("activate")) {

        new MyScheduledTask.execute(param);
    }

}
}

显现
<receiver android:name="YourPackageHere.AlarmReceiver"></receiver>

最佳答案

为了持续在线,您需要在线程上方运行android Service
您可以使用您在服务中声明的任何上述方法。

但是,在创建聊天应用程序时,您必须每2-3秒连续访问服务器一次,我认为这对用户不利(就您的应用程序将使用的互联网数据而言)。

推荐用于聊天应用程序的最佳协议(protocol)是XMPP(Jabber)。它定义了普通聊天应用程序应具有的所有规则,并且非常容易实现。
这是一个推送通知类型的服务器,每当收到新消息或添加新 friend 时,它将自动将通知推送给客户端(即使Gtalk使用此协议(protocol))

有一个很好的开源服务器提供了OpenfireXMPP集成,我建议这样做。

该公司还提供了一个用于客户端集成的库,名为 Smack ,您可以在应用程序中轻松实现该功能以使用简单的聊天功能。

关于android - 哪个是在android中反复执行任务的最佳方法? (例如:- Refreshing scores,更新Ui),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19764228/

10-11 04:30
查看更多