我正在编写下面的代码来在后台运行服务,但问题是我没有得到如何无限期地运行服务,即使应用程序已关闭,在这里按下我的服务正在停止。我已阅读许多教程但仍然与此相混淆。
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");
}
}
答案 0 :(得分:2)
在Android上,没有办法(至少对于第三方应用程序)运行永无止境的进程。系统总是可以终止您的服务。因此,您可以使用前台服务,但即使在这种情况下系统也可以终止您的服务(即使概率很低)。另外,你应该考虑cpu可以进入睡眠状态。所以你应该拿一个唤醒锁,但这样你可以杀死用户电池,所以它不是一个好的解决方案。我的建议是始终在事件&#34;例如,使用启动意向服务的brodacast接收器,它会执行一些操作然后退出。在Android上,始终运行的流程只是一个错误的设计选择。
答案 1 :(得分:-1)
一种方法是使用while循环但保持检查,即
while(true) {
if (condition != true) {
Thread.sleep(time);
} else {
break;
}
}