com*_*ghz 8 resume android android-fragments android-activity
我正在创建一个带有片段的导航抽屉活动的应用程序。在应用程序每次冷启动时,我都会执行一些初始化代码,并在其中加载以下内容:
这是冷启动时我的应用程序的流程:
在某些非活动状态下将应用程序置于前台后,Android会尝试重新启动当前的活动。这意味着我的初始化代码被绕过并被CoreActivity.onCreate()执行。
我的所有活动(MainActivity除外)都在扩展以下超级活动:
public abstract class MasterActivity extends AppCompatActivity {
@Override
protected final void onCreate(Bundle savedInstanceState) {
this.supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
if (!CrmContext.getInstance().verifyContextSet(this)) {
return;
}
super.onCreate(savedInstanceState);
onCreateAfterContext(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
在CrmContext中:
public boolean verifyContextSet(final Context context) {
boolean isContextSet = applicationContext != null;
if (isContextSet) {
return true;
}
Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
return false;
}
Run Code Online (Sandbox Code Playgroud)
在verifyContextSet()我做一些检查,以确保应用程序已正确加载。如果用户会话未正确加载。
我的问题:
如果该应用程序位于最前面,则将CoreActivity.onCreate()执行并verifyContextSet()返回false。在这种情况下,我想取消CoreActivity的创建,然后再次打开MainActivity。
当我做verifyContextSet()before时super.onCreate(),我得到了这个异常:
android.util.SuperNotCalledException:活动{nl.realworks.crm / nl.realworks.crm.view.CoreActivity}并未通过android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2287)上的super.onCreate()进行调用android.app.ActivityThread.access $ 800(ActivityThread.java:151)上的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1309)
我尝试先执行super.onCreate(),但随后Fragment先创建活动内部。这意味着我Fragment将在verifyContextSet()执行之前重新创建。
所以,如果我尝试cancel()/ finish()在onCreate()之前super.onCreate()已被调用,然后我得到了SuperNotCalledException。如果我执行super.onCreate()第一个,然后Fragment初始化这是不允许的,当verifyContextSet()收益false。
我要执行以下操作:
finish()当前活动,然后重新启动应用程序以打开MainActivity。我认为代码应该是这样的
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Your code
}
Run Code Online (Sandbox Code Playgroud)
super.onCreate(savedInstanceState) 始终作为第一行。
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |