Fixed
Status Update
Comments
du...@google.com <du...@google.com>
ap...@google.com <ap...@google.com> #2
In SystemJobService, it can expect null, and able to tolerance null from WorkManagerImpl.getInstance, due to auto-backup reason.
@Override
public void onCreate() {
super.onCreate();
mWorkManagerImpl = WorkManagerImpl.getInstance(getApplicationContext());
if (mWorkManagerImpl == null) {
// This can occur if...
// 1. The app is performing an auto-backup. Prior to O, JobScheduler could erroneously
// try to send commands to JobService in this state ( b/32180780 ). Since neither
// Application#onCreate nor ContentProviders have run, WorkManager won't be
// initialized. In this case, we should ignore all JobScheduler commands and tell it
// to retry.
But, current WorkManagerImpl.getInstance(Context context) implementation is that, it will never return null but throw IllegalStateException.
Isn't there's conflict among these 2 SystemJobService.onCreate logic, and WorkManagerImpl.getInstance logic?
@Override
public void onCreate() {
super.onCreate();
mWorkManagerImpl = WorkManagerImpl.getInstance(getApplicationContext());
if (mWorkManagerImpl == null) {
// This can occur if...
// 1. The app is performing an auto-backup. Prior to O, JobScheduler could erroneously
// try to send commands to JobService in this state (
// Application#onCreate nor ContentProviders have run, WorkManager won't be
// initialized. In this case, we should ignore all JobScheduler commands and tell it
// to retry.
But, current WorkManagerImpl.getInstance(Context context) implementation is that, it will never return null but throw IllegalStateException.
Isn't there's conflict among these 2 SystemJobService.onCreate logic, and WorkManagerImpl.getInstance logic?
Description
Devices/Android versions reproduced on: Pixel 3 / Android 10
When defining PagingConfig with some limited maxSize and disabled placeholders the app may crash with KotlinNullPointerException due to some items being null in the underlying PagingData list (which is expected only when placeholders are enabled). In the previous version of the library (2.1.2) all item out of the maxSize limit were properly removed and itemCount always set to be no bigger than maxSize.
I've attached a sample app (paging3sandbox.zip) that demonstrates the issue. Here are the steps to reproduce the issue:
1. open the app and scroll somewhere up to item 60 (pages may be loading a bit slowly as I've emulated a network delay)
2. than scroll fast up to the first item in the list
3. the app crashed with KotlinNullPointerException
What is expected:
There are no null items in the list when placeholders are disabled. The itemCount in PagingDataAdapter is sized properly and is the same as the count of all non-null items in the list.
At least it was working this way in the version 2.1.2. If it is some expected changes in the API please let me know what am I doing wrong here.