我在这里读到了很多关于打瞌睡模式的问题,例如Android 打瞌睡模式、Android N Doze 模式 - 如何保持后台下载和处理?、唤醒锁和打瞌睡模式等等。但在很多回复中,意见不一。我自己无法测试(模拟器不支持我的处理器,我唯一的测试设备是android 5.1)。我想知道接下来的情况。我有一个控制媒体播放器的活动。在 Android 6.0 及更高版本的设备上,由于打瞌睡模式,它无法按预期工作。正如许多解决方案所说,为了防止打瞌睡模式,它应该在前台的单独进程中启动一个服务,并从那里控制媒体播放器。问题是:如果我在单独的进程中启动带有部分唤醒锁的前台服务,除了显示通知之外什么也不做,并将控制权留给我的活动中的媒体播放器,它是否应该阻止打瞌睡模式?或者除了通过窗口管理器保持屏幕打开之外还有其他方法吗?
我有一个服务,可以在不同的线程中同时执行多个下载.对于每次下载,都会显示带有进度的通知.进度每秒更新一次.如果您同时运行三个或更多下载,当您更新通知时,他们会随机更改状态栏中的位置,跳过另一个.我试过设置优先级setPriority (priority),我用过setOnlyAlertOnce (true),但这没有帮助.与此同时,在其他一些应用程序中,我看到通知在他们的位置更新.
问题是,如何实现这一目标?
目前,我的通知创建如下:
private LongSparseArray<Task> mTasksArray = new LongSparseArray<>();
private int notifyId = 0;
...
//setup notification id on task download start
private void initTask(long taskId) {
Task task = new Task();
...
task.setNotificationId(notifyId++);
mTasksArray.put(taskId, task);
}
...
//notification update, called about once a second for every running download
private void showNotify(Task task) {
int notificationId = task.getNotificationId();
Notification notification = getProgressNotification(task);
mNotifyManager.notify(notificationId, notification);
}
@NonNull
private Notification getProgressNotification(Task task) {
int max = …Run Code Online (Sandbox Code Playgroud)