[英]Intent to MainActivity starts current Activity again
好吧標題有點怪異。 我的應用程序在SplashScreenActivity
上啟動,該SignInActivity
顯示3秒鍾,並啟動SignInActivity
以允許用戶登錄。 單擊nextButton
上的SignInActivity
將啟動MainActivity
。
問題是,啟動后,當我單擊nextButton
它將重新啟動SignInActivity
,然后nextButton
單擊nextButton
將我帶到MainActivity
,這是完全奇怪的。 如果我使用任何其他方法啟動SignInActivity
並單擊nextButton
,它將直接帶我進入MainActivity
而沒有任何問題。 我已經遍歷了代碼的頂部和底部,並且不知道是什么導致了此問題。
這是相關的代碼
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isLoggedIn) {
sharedPreferences.edit().putBoolean("isLoggedIn", true).apply();
Log.d("TAG", "Logged in Shared Preferences Set");
startActivity(new Intent(SignInActivity.this, MainActivity.class));
finish();
} else {
sharedPreferences.edit().putBoolean("isLoggedIn", false).apply();
Log.d("TAG", "Not Logged in Shared Preferences Set");
startActivity(new Intent(SignInActivity.this, MainActivity.class));
Toast.makeText(SignInActivity.this, "Sign In was Skipped", Toast.LENGTH_SHORT).show();
finish();
}
}
});
有趣的是,我注釋掉了startActivity()
方法以查看它是否重新啟動了活動,但沒有。 怎么了
更新:生命周期日志->不知道為什么在第一種情況下不會破壞SignInActivity
以及導致活動重新創建的原因。
(未通過Facebook或google +登錄)
10-27 00:46:20.549 22392-22392/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created
10-27 00:46:21.464 22392-22392/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:false
10-27 00:46:29.593 22392-22392/com.dhyanfoundation.vedicchants D/Log: Not Logged in Shared Preferences Set
10-27 00:46:29.692 22392-22392/com.dhyanfoundation.vedicchants D/Log: MainActivity Created
10-27 00:46:30.049 22392-22392/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created
10-27 00:46:30.211 22392-22392/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:false
10-27 00:46:30.473 22392-22392/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed
10-27 00:46:48.274 22392-22392/com.dhyanfoundation.vedicchants D/Log: Not Logged in Shared Preferences Set
10-27 00:46:48.674 22392-22392/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed
(通過facebook緩存的登錄名登錄)
10-27 00:51:17.411 28298-28298/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created
10-27 00:51:20.378 28298-28298/com.dhyanfoundation.vedicchants D/Log: Logged in Shared Preferences Set
10-27 00:51:20.438 28298-28298/com.dhyanfoundation.vedicchants D/Log: MainActivity Created
10-27 00:51:20.701 28298-28298/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created
10-27 00:51:21.100 28298-28298/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed
10-27 00:51:26.960 28298-28298/com.dhyanfoundation.vedicchants D/Log: Logged in Shared Preferences Set
10-27 00:51:27.326 28298-28298/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed
(通過Google+緩存的登錄名登錄)
10-27 00:53:29.039 30454-30454/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created
10-27 00:53:33.133 30454-30454/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:true
10-27 00:53:44.096 30454-30454/com.dhyanfoundation.vedicchants D/Log: Logged in Shared Preferences Set
10-27 00:53:44.204 30454-30454/com.dhyanfoundation.vedicchants D/Log: MainActivity Created
10-27 00:53:44.565 30454-30454/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created
10-27 00:53:44.954 30454-30454/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed
10-27 00:53:45.358 30454-30454/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:true
10-27 00:53:52.674 30454-30454/com.dhyanfoundation.vedicchants D/Log: Logged in Shared Preferences Set
10-27 00:53:53.120 30454-30454/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed
我創建了一個新的空白活動並取代了MainActivity
與BlankActivity
的內nextButton
點擊方法和一切都很好。 這是生命周期日志:
10-27 00:56:19.538 1502-1502/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created
10-27 00:56:22.116 1502-1502/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:false
10-27 00:56:24.747 1502-1502/com.dhyanfoundation.vedicchants D/Log: Not Logged in Shared Preferences Set
10-27 00:56:24.849 1502-1502/com.dhyanfoundation.vedicchants D/Log: BlankActivity Created
10-27 00:56:25.244 1502-1502/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed
首先,我認為您應該重新審視您的設計。 當用戶嘗試通過該應用程序登錄時,應從SplashScreenActivity本身進行意圖重定向中檢查其登錄狀態的邏輯。
假設您已正確跟蹤了登錄狀態,則活動流程應如下所示:
1) SplashScreenActivity- > MainActivity (如果用戶已登錄)
2) SplashScreenActivity- > SignInActivity- > MainActivity (如果用戶未登錄)
如果用戶登錄狀態為false,則應將其重定向到SignInActivity,然后在nextButton的onclick事件中,應驗證其憑據,然后應更新登錄狀態,然后將其重定向到MainActivity 。
在您的MainActivity中,您應該允許用戶注銷,然后在那里,登錄狀態應更新為false。
我知道這並不能直接回答您的問題,但是很多時候可以通過重新考慮設計並使其在該級別本身更可靠來消除此類錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.