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

标签 android android-service

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

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/

相关文章:

从 Activity 标签中选择的 Android 应用程序图标名称比从应用程序标签中选择的

android - 我应该将外部数据保存在目录 Android/data 还是 data/中?

安卓服务 : What happen at the end of Activity life?

android - android.os.Messenger 和 android.os.Handler 的旋转变化问题

android - menu.xml 中的 ActionbarSherlock SearchView 给出 Resources$NotFoundException

安卓工作室 : SDK location changes for same project using Mac (OSX) and Windows

android - BottomNavigationView的自定义TextSize支持android

php - 尝试制作 Android 服务

android - 如何在两个 Android 应用程序(如 Facebook 应用程序和 Facebook Messenger)之间共享登录数据

android - 什么类型的后台服务?