2013-11-03 52 views
0

在我的應用程序中,我有很多活動從一個按鈕跳轉到另一個按鈕。我想確保當用戶點擊一個按鈕離開該活動時,該活動不在後臺運行,從而減慢了應用程序的運行速度。所以我想解決這個是在活動像這樣的底部添加onStop方式:活動減慢應用程序

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.homeactivity); 

    btn1 = (Button)findViewById(R.id.button1); 
    btn1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(HomeActivity.this, activity.class); 
      startActivity(i); 

     } 

    }); 

    btn2 = (Button)findViewById(R.id.button2); 
    btn2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(HomeActivity.this, activity1.class); 
      startActivity(i); 

     } 

    }); 


} 
    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
    } 
} 

我需要知道,如果這個onStop是真正在後臺運行,並減慢了應用程序停止活動。如果沒有,有人可以協助我停止在後臺運行的活動嗎?

回答

3

在致電startActivity(i);後,請致電finish();,以確保您之前的活動已被殺死,並且不會佔用更多資源。

此外,當您覆蓋onStop()時,由於您只是調用該函數的super方法,因此您沒有執行任何操作。通常,如果要確保數據連續性,則會覆蓋活動生命週期方法。例如,您有一個接受用戶輸入的應用程序,並且要保留該應用程序,則會覆蓋處理這些情況的方法onPause()onResume()。您可以採取類似於輸入的方式,並將其存儲在SharedPreferences中的onPause()方法中,並且調用onResume()方法時,將從SharedPreferences中獲取這些值並繼續使用它們。

一個很好的例子是onCreate()覆蓋。這是啓動活動時調用的第一個函數。在你的onCreate(),你有你的平常要求它的super方法,但是,你有更多的事情在那裏。實際上,您只需撥打super函數就可以獲得onCreate(),但這對您沒有任何好處。在onCreate()函數中,您可以設置佈局並分配按鈕值以及onClickListeners和其他窗口小部件。

請記住,當您重寫活動生命週期方法時,請在其中執行一些操作。

現在,如果你想回到你以前的活動(即開啓了新的)這樣做是你的第二個活動:

@Override 
protected void onBackPressed(){ 
    super.onBackPressed();   

    Intent intent = new Intent(this, ActivityOne.class); 
    startActivity(intent); 
    finish(); 
} 

這將帶你到你的第一個活動並殺死第二個。

+0

'finish'();它釋放了一些資源,但是當我按下後退按鈕返回到該活動時,它將我帶出整個應用程序。那麼我是否將'onResume'放在活動的底部? –

+0

看到我更新的答案。您必須覆蓋後退按鈕並創建打開原始活動的意圖。 – Razgriz

+0

我已經把'onBackPressed'放在了'onStop'的地方。一切正常,只是當我按下後退按鈕時出現黑屏約半秒鐘,然後它加載以前的活動 –

0

當您不需要活動時,就在活動開始後調用活動方法完成()。它會在發起活動後殺死當前的一個。

2

如果你想停止並殺死當前活動,只需調用finish();意向後

//start new activity 
Intent i = new Intent(HomeActivity.this, activity1.class); 
startActivity(i); 
//kill current activity 
finish(); 
0

請熟悉Android Activity Lifecycle。 Activity的基本前提是如此構建應用程序的代碼,以便Android操作系統可以高效地管理它。例如,如果您開始的新活動是需要大量內存的遊戲屏幕,則Android會銷燬所有應用程序的先前活動,並在用戶退出遊戲活動時重新構建它們。

只要您的活動不做後臺線程處理或向處理程序發送頻繁的消息,它們將以任何方式減慢設備速度。如上所述,由於目前不在前臺的所有活動都可能隨時由操作系統刪除,因此您不應該在第一時間對它們進行任何操作。