android - 当所有活动解除绑定时,是否会破坏有界服务?
问题描述
我在 android 有界服务的 onStartCommand() 中创建一个单独的线程,并使用 Runnable 的 Run() 中的条件检查来运行它,例如,当(条件)时,有一个活动正在使用这个有界服务,然后解除它的绑定。我读到有一条规则,如果没有绑定的活动,有界服务会自动销毁。我是否需要在 unbind 方法中翻转我的条件,否则服务将如何知道它现在必须终止?如果是,那么它由我的代码控制,而不是由 Android 本身控制
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
public class ServiceDemo extends Service {
private static final String TAG = "ServiceDemo";
private boolean isRunning = false;
private boolean isBound = false;
private int counter = 0;
private static final int MIN = 0;
private static final int MAX = 100;
IBinder myServiceBinder = new MyServiceBinder();
public class MyServiceBinder extends Binder {
public ServiceDemo getServiceInstance(){
return ServiceDemo.this;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
isBound = true;
return myServiceBinder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand executed in Thread : "+Thread.currentThread().getId());
isRunning = true;
generateSequentialInteger(MIN, MAX);
return START_NOT_STICKY;
}
private void generateSequentialInteger(int start, int stop){
new Thread(new Runnable() {
@Override
public void run() {
counter = start;
while(isRunning && counter<stop){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG, "Thread ID : "+Thread.currentThread().getId()+" : Service has generated number "+counter);
counter++;
}
}
}).start();
}
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG, "onUnbind executed");
isBound = false;
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
isRunning = false;
Log.i(TAG, "onDestroy executed");
}
}
'''
解决方案
推荐阅读
- python - 如何使用 Python 的套接字库获取部分 UDP 消息?
- python - 过度自信的模型预测导致全 0 梯度
- r - 如何识别周末并从我在 R 中的时差中自动减去它
- php - 我想将 php 中的变量传递给引导模式以从同一文件中的数据库中获取相应的数据
- amazon-web-services - 在 AWS 中跟踪应用程序日志记录的最佳方法?
- android - 如何将 JSON 响应转换为字符串?
- angular-universal - Angular 通用视图页面源
- extjs - 即使单击 Sencha ExtReact 中的 MenuItems,如何使 Menu satay 处于活动状态?
- ansible - 使用 Ansible 和 Openstack Packstack 创建 Neutron 端口
- python - 如何在运行 Jenkins CI 管道时屏蔽作为用户输入传递的密码?