gpt4 book ai didi

android - 前台服务卡住用户界面

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

我想创建一个简单的虚拟前台任务来了解它的行为。不幸的是我有一些问题。首先是代码:

public class ImageSendEmailService extends Service {

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.getAction().equals(ForegroundServiceTags.STARTFOREGROUND_ACTION.getValue())) {
for (int i = 0; i <= 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

String notificationText = String.valueOf((int) (100 * i / 10)) + " %";

Notification.Builder builder = new Notification.Builder(this);
builder.setContentTitle("Progress");
builder.setContentText(notificationText);
builder.setTicker("Notification!");
builder.setWhen(System.currentTimeMillis());
builder.setDefaults(Notification.DEFAULT_SOUND);
builder.setAutoCancel(true);
builder.setSmallIcon(R.drawable.ic_launcher);

Notification notification = builder.build();

this.startForeground(101, this.notification);
}
}

return START_STICKY;
}

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

我遇到的第一个问题是该服务正在卡住应用程序的用户界面。 UI 在 Service 完成其工作后继续运行,但在执行时被卡住。

我遇到的第二个问题是,当工作完成时,100% 通知显示在设备的通知选项卡中,我无法删除它。我需要它在工作时不可删除,但在完成工作后可删除。

最佳答案

阅读this

如果你想做一个会阻塞主线程的任务,你基本上必须产生一个新线程。

为您的notification问题

.setOngoing(true)

将使通知无法终止

一旦你的任务完成,用一个新的覆盖通知

.setOngoing(false)

为此你必须保存通知 id,或者只是从代码中删除你自己

编辑:工作完成后,您还必须调用 stop self。而是根本不要弄乱通知。由于它是前台服务,因此在服务完成之前您无法删除通知

关于android - 前台服务卡住用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207013/

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