It is common to have Application
class as follow
public class WeNoteApplication extends MultiDexApplication {
public static WeNoteApplication instance() {
return me;
}
@Override
public void onCreate() {
super.onCreate();
me = this;
During normal circumstance, Application
's onCreate
will always be called before entry point Activity
's onCreate.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Normally, it will NOT be null.
android.util.Log.i("CHEOK", "WeNoteApplication -> " + WeNoteApplication.instance());
However, if I run the following command while the app is launched
c:yocto>adb shell bmgr restore com.yocto.wenote
restoreStarting: 1 packages
onUpdate: 0 = com.yocto.wenote
restoreFinished: 0
done
The app will be closed. If, I tap on the app icon to launch again. This is what happens
Application
'sonCreate
is not executed!Activity
'sonCreate
is executed, andWeNoteApplication.instance()
isnull
I look at some Google's Android source code (WorkManager
for instance)
https://github.com/googlecodelabs/android-workmanager/issues/80
In their comment, they states that
// 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,...
It seems that, if backup related process is involved, Application
's onCreate
will not be executed!
Why it is so? Is this behavior ever documented some where?
Issue tracker
https://issuetracker.google.com/issues/138423608
Full example for bug demonstration
https://github.com/yccheok/AutoBackup-bug
See Question&Answers more detail:os