gpt4 book ai didi

Android onStartCommand 标志

转载 作者:行者123 更新时间:2023-11-29 19:24:25 24 4
gpt4 key购买 nike

我有一个简单的服务:

public class TestService extends Service {

final String LOG_TAG = "myLogs";

public void onCreate() {
super.onCreate();
Log.d(LOG_TAG, "TestService onCreate");
}

public void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "TestService onDestroy");
}

public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG_TAG, "TestService onStartCommand")
readFlags(flags);
MyRun mr = new MyRun(startId);
new Thread(mr).start();
return START_REDELIVER_INTENT;
}

public IBinder onBind(Intent arg0) {
return null;
}

void readFlags(int flags) {
switch (flags) {
case START_FLAG_REDELIVERY:
Log.d(LOG_TAG, "START_FLAG_REDELIVERY");
break;
case START_FLAG_RETRY:
Log.d(LOG_TAG, "START_FLAG_RETRY");
break;
default:
Log.d(LOG_TAG, "Flag: " + flags);
}
}

class MyRun implements Runnable {

int startId;

public MyRun(int startId) {
this.startId = startId;
Log.d(LOG_TAG, "Run#" + startId + " create");
}

public void run() {
Log.d(LOG_TAG, "Run#" + startId + " start");
try {
TimeUnit.SECONDS.sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
stop();
}

void stop() {
Log.d(LOG_TAG, "Run#" + startId + " end, stopSelfResult("
+ startId + ") = " + stopSelfResult(startId));
}
}

如果我理解正确,标记 START_REDELIVER_INTENT 应该尽快重启我的服务,因为有足够的可用内存。但是(我已经在 3 台设备(4.1.2、4.4.2 和 6.0.1)上进行了检查)当我终止进程时,服务仅在其中一台设备 (4.1.2) 上重新启动:

 D/myLogs: TestService onCreate
D/myLogs: TestService onStartCommand
D/myLogs: START_FLAG_REDELIVERY
D/myLogs: MyRun#1 create
D/myLogs: MyRun#1 start
D/myLogs: MyService onDestroy
D/myLogs: MyRun#1 end, stopSelfResult(1) = true

另外两个设备有什么问题?与其他标志相同的问题,例如START_STICKY - 服务进程永久终止。

最佳答案

覆盖 onLowMemory() 方法并将 Log.d 标签也放在那里,它会告诉你操作系统何时会在资源紧缩时尝试停止服务。

START_REDELIVER_INTENT - 告诉系统在崩溃后重新启动服务并重新传送崩溃时存在的 Intent 。崩溃可能是因为资源不足。

如果那时没有发生资源紧缩,您的 Activity 将不会被操作系统停止。

关于Android onStartCommand 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com