2013-07-01 23 views
0

我想给LocationClient一个两分钟的时间来连接,然后调用getLastLocation。最初,我使用Timer(和TimerTask)实现了这一功能,但由于Timers在sleepmode中不工作,我想将其转换为AlarmManager。不过,考虑到AlarmManager会调用另一个类,我对于如何做到这一点感到有些困惑,而我想保持在同一个类中,只是延迟了两分钟的时间。AlarmManager调用同一类的函数

这是它如何看起来与计时器。

Timer theTimer = new Timer(); 
    theTimer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      if(checkIfGooglePlay() && checkTime()) { 
       getPostLocation(); 
       stopSelf(); 
       mLocationClient.disconnect(); 
      } 
     } 
    }, TWO_MINUTES); 
+0

AlarmManager可以使用pendingIntent调用相同的类 –

+0

因此,我可以调用mLocationClient.connect(),然后创建一个PendingIntent,并在该类上设置两分钟的AlarmManager? – NumenorForLife

+0

我不知道你的正确要求,但是我知道了什么程度,你应该使用一个Service类来完成这个任务。可以使用AlarmManager类或以正常方式唤醒,使用界面与您的活动中的服务进行通信... –

回答

0

您可以尝试使用Java的Thread.sleep()。这是一种静态方法,因此您不需要实例化新的Thread。它会抛出一个InterruptedException,在简单的情况下,它不应该打扰你。

http://developer.android.com/reference/java/lang/Thread.html

导致其中发送此消息睡给定的时间间隔(毫秒和纳秒给出)的线程。

+1

这是一个可怕的想法。如果它在UI线程上,它将阻塞该线程并导致UI变得无响应,可能会启动看门狗定时器。如果它在另一个线程上,它将阻止线程完成它的工作。睡眠是99%的时间,这是程序员不知道他在做什么的标志。 –

1

Alarm Manager通过挂起的意图调用广播接收器。只需使该BroadcastReceiver实现为注册该类的私有子类。这样它就可以完全访问类成员变量和函数。

+0

Hi @Gabe,我对这个Noobish后续问题表示歉意,但我不知道(并且认为这是不允许的),扩展了两个类。如果我没有弄错,你推荐的是我写了一个扩展两个类的新子类:public class TheSubClass extends TheFirstClass,BroadcastReceiver – NumenorForLife

+0

不,我正在谈论一个内部类。一个类可以在其中包含第二个类。 –

+0

Hi @Gabe,我正在调用接收器/服务时遇到一些困难。我已经创建了一个新的问题来解决这个问题:http://stackoverflow.com/questions/17429961/service-calling-alarmmanager-on-another-service。谢谢你的帮助。 – NumenorForLife