Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android安裝應用後點擊"打開"(Open)帶來的問題及解決方式

Android安裝應用後點擊"打開"(Open)帶來的問題及解決方式

編輯:關於Android編程

MainActivity如下:
package cc.cc;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
/**
 * Demo描述:
 * 
 * 一年多前遇到一個問題--->:
 * 1 客戶從GooglePlay上下載了我參與的開發的應用
 * 2 下載完成後,點擊安裝
 * 3 安裝完成後,在屏幕底部有兩個選項"打開"和"完成"
 * 4 點擊打開
 * 5 App進入到第一個Activity,此時簡單地操作:比如在一個EditText上輸入文字
 * 6 按下HOME鍵
 * 7 在桌面上找到該應用的ICON,點擊後進入應用
 * 
 * 問題就在此時發生了,原先顯示在EditText的文字不見了........
 * 當時是覺得很奇怪的.看了Log才知道原來是Activity重新
 * 執行了onCreate()和onStart()以及onResume().
 * 
 * 客戶抓著這個問題不放,我也一直半會給不出合理的解釋.怎麼辦呢?
 * 我測試了GooglePlay上的其余幾款APP,也發現了同樣的問題.於是我給客戶說:
 * 這是Android系統的問題,很難解決.好在客戶通情達理沒有糾纏,這事也就過去了.
 * 但這個問題一直在我心裡埋著.
 * 
 * 最近偶然在CSDN上又看到一篇博客在談論該問題.我於是去stackoverflow找答案.
 * 看到了解決的辦法,但是說實話,代碼我卻沒有看懂.最核心的這一句:
 * if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0)
 * 我依然是一知半解.不甘心之余問了幾位博友,亦無確切答案.
 * 暫作罷,期待以後有機會可以通解.
 * 
 * 我不是代碼的編寫者,我只是代碼的搬運工.
 * 從stackoverflow找的代碼,我就貼在下面了.同時給出資料出處.
 * 
 * PS:最近兩月一直無法使用Google,對於常要去一些外國網站找資料的IT人員來說確實不便.
 *    這或許是中國software從業者的小悲哀.難道外國網站的代碼裡有敏感詞???????????
 *    
 * 
 * 參考資料:
 * 1 http://www.atlassc.net/?p=479
 * 2 http://stackoverflow.com/questions/6337217/how-to-return-to-the-latest-launched-activity-when-re-launching-application-afte
 * 3 http://stackoverflow.com/questions/6356467/activity-stack-ordering-problem-when-launching-application-from-android-app-inst 
 * 4 http://flowercat.iteye.com/blog/380859
 * 5 http://blog.csdn.net/nupt123456789/article/details/34415849
 *   Thank you very much
 *   
 * 補充說明:
 * 在資料1中提到的核心思想--->
 * 我們需要判斷:該意圖是打開一個新的任務,還是將後台的應用給提到前台來.
 * 若是要將應用提到前台來直接將這個Activity結束掉,然後顯示出來的Activity就是之前被最小化的Activity.
 * 因為點擊圖標的意圖會將新啟動的Activity置於頂端,而頂端的下面的Activity就是之前被最小化的Activity.
 * 此時結束掉新啟動的Activity,就可以讓之前被最小化的Activity 顯示出來了.
 *
 */
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {  
			finish();
			return;
		 }
		setContentView(R.layout.main);
	}
	
	

	@Override
	protected void onStart() {
		super.onStart();
		System.out.println("---> onStart()");
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		System.out.println("---> onResume()");
	}
	
	
}

main.xml如下:


    



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved