私はフラグメントでナビゲーション・ドロワ・アクティビティを持つアプリケーションを作成しています。 AndroidはonCreate()でactivityを停止してからsuper.OnCreate()を呼び出す前に
- ユーザーセッション:アプリのすべてのコールドスタート時、私は次のことをロードするいくつかの初期化コードを実行しています
- サーバーのデータを取得して、アプリケーションの起動を続行します。
- がMainActivityを開始し、ユーザーセッションを検証:
この
は、コールドスタートをしている私のアプリの流れです。
- セッションが有効な場合は、CoreActivityを開きます。
- そうでない場合は、LoginActivityを開きます。
Androidが何らかの非アクティブな状態でフォアグラウンドになると、Androidは現在のアクティビティを再試行します。つまり、私の初期化コードがバイパスされ、CoreActivity.onCreate()
が実行されます。
すべての私の活動(MainActivityを除く)は、次のスーパーの活動を拡大している。CrmContextで
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);
}
:verifyContextSet()
で
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;
}
私はそれを確認するためにいくつかのチェックをしていますアプリが正しく読み込まれました。ユーザーセッションが正しくロードされていない場合
私の問題:アプリが前面に表示され
場合CoreActivity.onCreate()
が実行され、verifyContextSet()
falseを返しています。この場合、CoreActivityの作成をキャンセルし、MainActivityをもう一度開きます。
私はsuper.onCreate()
前に私のverifyContextSet()
を行うと、その後、私はこの例外を取得:
android.util.SuperNotCalledException: Activity {nl.realworks.crm/nl.realworks.crm.view.CoreActivity} did not call through to super.onCreate()
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2287)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
私が最初super.onCreate()
を実行しようとしましたが、その後の活動の内部Fragment
が最初に作成されます。つまり、verifyContextSet()
が実行される前にFragment
が再作成されたことを意味します。私はと呼ばれてきたsuper.onCreate()
前cancel()
/finish()
onCreate()
にしようと
そう、私はSuperNotCalledException
を取得します。最初にsuper.onCreate()
を実行した場合、がfalse
を返したときに許可されないFragment
が初期化されます。
私は次の操作を実行したい:
- フォアグラウンド
- チェックするためにアプリをもたらすない場合はアプリが
- を初期化されている場合、その後、
finish()
現在の活動と、その後にアプリを再起動しますMainActivityを開きます。
私は物事をより明確にするために私の質問を調整しました。 – com2ghz