Android服务不会重新启动onStartCommand

时间:2014-05-21 18:33:25

标签: android service restart

我有一个服务类来验证标记和圆圈之间的位置。

public class VerifyPositionService extends Service{

public static boolean isRunning;
private float[] distance = new float[2];
int i;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    i = 0;
    if (MainActivity.circles.size() > 0){
        for(Circle c : MainActivity.circles){
            Location.distanceBetween( MainActivity.marker.getPosition().latitude, MainActivity.marker.getPosition().longitude,c.getCenter().latitude, c.getCenter().longitude, distance);
            if( distance[0] < c.getRadius()  ){
                Toast.makeText(getApplicationContext(), "in" , Toast.LENGTH_LONG).show();
            }
            else
                Toast.makeText(getApplicationContext(), "out" , Toast.LENGTH_LONG).show();
            i++;
        }
    }
    else
        Toast.makeText(getApplicationContext(), "none" , Toast.LENGTH_LONG).show();
    return START_STICKY;
}



@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
}

}

所以,在我的主要活动中,在方法onCreate中,我实例化了一次服务:

Intent intent = new Intent(this, VerifyPositionService.class);
startService(intent);

服务只运行一次,给我祝酒:无。

当我添加圈子时,服务不会返回消息..它会给我吐司:in或out。 谁能帮忙吗?

1 个答案:

答案 0 :(得分:0)

该服务仅在启动时运行一次start方法。您的服务将继续运行,但在示例中您没有做任何事情。

因为你收到了#34;没有&#34;在你的祝酒词中,当你的服务开始时,你的MainActivity中没有任何圈子。

您需要将位置验证码放入其他方法中,并随时要求您的服务执行。 或者,如果要定期执行计算,请将代码放在线程中并在onStartCommand方法中启动线程。另外,在线程中放入一个sleep来指定你希望方法执行的频率。