我的應用需要用戶使用Facebook登錄。一旦他們這樣做了,每次他們打開應用程序時都檢查Facebook令牌,以便我們不要求他們再次登錄 - 我們將其重定向到MainActivity
。活動流程:OnCreate在我想要恢復活動時調用
請注意,這是一個'空視圖'活動 - 我沒有使用setContentView
將它設置爲一個視圖,它純粹是爲決策制定。
public class DecisionActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
if (AccessToken.getCurrentAccessToken() != null) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
} else {
Intent startIntent = new Intent(this, SignUpActivity.class);
startActivity(startIntent);
finish();
};
}
}
這是我的MainActivity代碼。請注意,我在onCreate
中致電我的網絡操作,因爲我不想在每次最小化我的應用程序時調用它們,並在活動onResumes
時最大化我的應用程序。創建我的活動時必須調用一次。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//show my progress bar
//CALL MY API TO GET SOME DATA FROM THE SERVER
//hide my progress bar after data is received.
}
}
這很好用。如果用戶已登錄,他會每次都重定向到我的MainActivity
。如果用戶沒有登錄,他會去SignUpActivity
。
但是,今天我發現這個代碼有一個令人討厭的副作用。 onResuming情景1我的應用程序按我希望的方式工作。 關於onResuming我的應用程序的情景2確實是而不是按照我希望它工作的方式工作。
方案1:
如果你在你的MainActivity和您再次減少您的應用程序,並按下方形按鈕,找到您的應用,最大限度地提高,在MainActivity onCreate
方法不會被稱爲活動只是onResumes
因此不執行網絡操作,進度條不顯示,這是我想要的。
方案2:
然而,如果你減少你的應用程序,並決定點擊您的手機,DecisionActivity
將推出應用程序圖標,這將決定MainActivity
需要被推出作爲用戶登錄已經存在並且令牌存在。由於MainActivity
重新啓動,onCreate
被調用並執行網絡活動,並顯示進度條,這是而不是我想要的。
當我點擊手機上的應用程序圖標時,如何防止發生這種情況?
我查流行的應用程序,如Facebook,現在看他們通過對他們的測試方案1和方案2有同樣的問題,他們似乎並沒有遇到這個問題,這讓我覺得是否設置我已經用來檢查是否有人登錄我的應用程序DecisionActivity
可以以更好的方式完成。
實際上,我認爲fundementally我的應用程序是有缺陷的,並且DecisionActivity需要與我的MainActivity合併。然後MainActivity將決定將作出所有決定性的電話,但這需要大量的返工... – Simon
是的,你應該重做它,但如果它是一個活躍的應用程序,使用快速入侵,直到你找出一個真正的解決方案。我現在在學校,所以我會盡量考慮一些事情。 –
而且,請勿在MainActivity的onCreate()方法中與服務器進行通信,因爲如果用戶的連接速度較慢,則永久需要加載主屏幕,並且客戶端會認爲應用程序已凍結。如果您正在與服務器進行通信,請確保在另一個線程中執行此操作,以便返回onCreate()方法,並且至少加載主屏幕。顯示一個對話框來顯示進度條。 –