2015-04-17 44 views
2

我有FirstRunActivity和MainActivity(啓動器)。當應用程序打開,如果應用程序第一次打開,我開始FirstRunActivity(與清除活動的歷史)。活動重新創建和閃爍

它工作正常。但是,在設備中啓用自動旋轉功能後,使用旋轉的設備打開應用程序時,屏幕會閃爍。在日誌中,我可以看到該活動在循環中重新創建。

日誌:

3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 
04-17 22:49:00.390 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStop 
04-17 22:49:00.410 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStart 
04-17 22:49:00.410 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onResume 
04-17 22:49:00.480 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 
04-17 22:49:00.480 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStop 
04-17 22:49:00.520 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStart 
04-17 22:49:00.520 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onResume 
04-17 22:49:00.630 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 
04-17 22:49:00.630 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStop 
04-17 22:49:00.680 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStart 
04-17 22:49:00.680 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onResume 
04-17 22:49:00.800 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 
04-17 22:49:00.810 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStop 
04-17 22:49:00.870 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStart 
04-17 22:49:00.870 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onResume 
04-17 22:49:00.960 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 
04-17 22:49:00.970 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStop 
04-17 22:49:00.990 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStart 
04-17 22:49:00.990 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onResume 
04-17 22:49:01.060 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 
04-17 22:49:01.060 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStop 
04-17 22:49:01.080 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStart 
04-17 22:49:01.080 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onResume 
04-17 22:49:01.150 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 
04-17 22:49:01.150 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStop 
04-17 22:49:01.180 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStart 
04-17 22:49:01.180 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onResume 
04-17 22:49:01.250 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 
04-17 22:49:01.250 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStop 
04-17 22:49:01.280 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onStart 
04-17 22:49:01.280 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onResume 
04-17 22:49:01.430 3028-3028/tm.mobile.payment D/SazHyzmat﹕ FirstRunActivity onPause 

FirstRunActivity.java:

public class FirstRunActivity extends ActionBarActivity { 

    @InjectView(R.id.password) EditText passwordView; 
    @InjectView(R.id.password_retype) EditText passwordRetypeView; 
    @InjectView(R.id.save) View saveButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_first_run); 
     ButterKnife.inject(this); 
    } 

    @Override protected void onStart() { 
     super.onStart(); 
     U.l("FirstRunActivity onStart"); 
    } 

    @Override protected void onStop() { 
     super.onStart(); 
     U.l("FirstRunActivity onStop"); 
    } 

    @Override protected void onPause() { 
     super.onStart(); 
     U.l("FirstRunActivity onPause"); 
    } 

    @Override protected void onResume() { 
     super.onStart(); 
     U.l("FirstRunActivity onResume"); 
    } 
} 

MainActivity.java:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     settingsManager = SettingsManager.getInstance(this); 
     //If app not initialized 
     if (! settingsManager.isAppInitialized()) { 
      Intent intent = new Intent(this, FirstRunActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
      ComponentName cn = intent.getComponent(); 
      Intent mainIntent = IntentCompat.makeRestartActivityTask(cn); 
      startActivity(mainIntent); 
       finish(); 
     } else { 
      //Other code 
     } 
} 

如果我改變代碼,開始第一次運行活性(MainActivity.java)在剛開始活動時,活動不會閃爍,但按下後按鈕將打開MainAct與白色屏幕的真實感。 或以其他方式清除活動歷史記錄,例如:Clear the entire history stack and start a new activity on Android無論如何屏幕​​閃爍。

那麼,我該如何停止閃爍和清除活動歷史?

編輯

測試後我發現,在我的其他活動,這與上面的代碼沒有關係,有同樣的問題,閃爍。使用旋轉的設備打開活動時。

+1

好奇,爲什麼幾乎所有的方法是'FirstRunActivity'覆蓋,調用'super.onStart()'和不是他們自己的同行?這可能與問題無關,但你永遠不知道。 –

+0

第二個想法,我注意到你的日誌是由'FirstRunActivity onStart/onStop/onPause/onResume'組成的,但實際上你的日誌只包含'ActionBarActivity onStart'。所以我的好奇心可能比我想象的更多地處理這個問題。我仍然不確定:) –

回答

1

查看IntentCompat.makeRestartActivityTask的文檔,它聽起來像它創建一個意圖,用於重新啓動您當前的活動。我建議刪除這兩行:

ComponentName cn = intent.getComponent(); 
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn); 

我從來不需要他們,而改變活動。

此外,對於mContext.finish()的調用可以用finish()完成,在這種情況下永遠不能爲null,很可能是因爲你看到白色屏幕的原因是mContext爲null,所以你從未成功完成該活動。

+0

好!現在我正常開始活動並完成mainActivity。奇怪,但現在它工作。我會在其他活動中測試這個,然後我會接受你的問題:)。順便說一句,我複製mContext.finish()(和其他一些線)從另一個文件,並忘記改變它。 – alashow

+0

我很高興聽到我的幫助,祝你好運! –