经过长时间的搜索,我仍然对此感到困惑,虽然我发现了一些相关的帖子,但他们没有回答我在寻找什么。在我的场景中,我想以固定的间隔(例如每5分钟)将用户的lat发送到服务器。为了做到这一点,我使用了一个具有自己进程的服务,以便在Activity销毁时不会被杀死,并且在服务方法onStartCommand中我使用了一个条件为always的while循环,并且在该循环中我将位置更新到服务器并给出延迟thread.sleep如下所示
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
While(true)
{
Location currentLocation = getLocation();
updateLocationToServer(currentLocation);
try
{
Thread.sleep(300000)
}
catch(Exception e)
{
e.printStackTrace()
}
}
return Service.START_STICKY;
这里我无法理解return语句是无法访问的,那么服务如何在销毁时自动重启,其次使用thread.sleep导致ANR(应用程序无响应),而服务是后台进程,我发现它直接在UI线程中运行这些信息让我感到困惑,在这种情况下,获得所需功能的最佳方法是什么。
答案 0 :(得分:3)
您应该使用AlertManager
代替!
AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
答案 1 :(得分:1)
secondly using thread.sleep causing ANR (Application Not Responding) while service is a background process
这 http://developer.android.com/reference/android/app/Service.html
请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。
答案 2 :(得分:0)
请尝试使用警报管理器,请参阅how to set it to repeat every 5 minutes
的此示例