无法在后台运行服务indefinitley

时间:2015-04-24 15:26:05

标签: android service background

我正在编写下面的代码来在后台运行服务,但问题是我没有得到如何无限期地运行服务,即使应用程序已关闭,在这里按下我的服务正在停止。我已阅读许多教程但仍然与此相混淆。

public class HelloService extends Service {
    private static final String TAG = "HelloService";
    private boolean isRunning = false;
    @Override
    public void onCreate() {
        Log.i(TAG, "Service onCreate");
        isRunning = true;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "Service onStartCommand");
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 5; i++) {
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                    }
                    if (isRunning) {
                        Log.i(TAG, "Service running");
                    }
                }
                //Stop service once it finishes its task
                stopSelf();
            }
        }).start();

        return Service.START_STICKY;
    }
    @Override
    public IBinder onBind(Intent arg0) {
        Log.i(TAG, "Service onBind");
        return null;
    }

    @Override
    public void onDestroy() {
        isRunning = false;
        Log.i(TAG, "Service onDestroy");
    }
}

2 个答案:

答案 0 :(得分:2)

在Android上,没有办法(至少对于第三方应用程序)运行永无止境的进程。系统总是可以终止您的服务。因此,您可以使用前台服务,但即使在这种情况下系统也可以终止您的服务(即使概率很低)。另外,你应该考虑cpu可以进入睡眠状态。所以你应该拿一个唤醒锁,但这样你可以杀死用户电池,所以它不是一个好的解决方案。我的建议是始终在事件&#34;例如,使用启动意向服务的brodacast接收器,它会执行一些操作然后退出。在Android上,始终运行的流程只是一个错误的设计选择。

答案 1 :(得分:-1)

一种方法是使用while循环但保持检查,即

while(true) {
    if (condition != true) {
        Thread.sleep(time);
    } else {
        break;
    }
}