2

经过长时间的搜索后,我仍然对此感到困惑,尽管我找到了一些相关的帖子,但他们没有回答我正在寻找的内容。在我的场景中,我想每隔 5 分钟将用户的 lat long 发送到服务器。为此,我使用了一个具有自己进程的服务,以便在 Activity 销毁时它不会被杀死,并且在服务方法 onStartCommand 中我使用了一个条件始终为 true 的 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中运行线程这些信息让我感到困惑,在这种情况下,获得所需功能的最佳方法是什么。

4

3 回答 3

3

你应该使用 andAlertManager代替!

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);

http://justcallmebrian.com/?p=129

于 2012-06-14T12:44:52.707 回答
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

请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。

于 2012-06-14T12:44:41.253 回答
0

尝试使用警报管理器,请参阅此示例,了解如何将其设置为每 5 分钟重复一次

于 2012-06-14T12:45:19.927 回答