2011-07-30 74 views
14

有誰知道Android設計背後的原理是通過簡單的方向改變來銷燬和重新創建活動嗎?爲什麼Android在方向改變時重新創建活動

不應該讓活動重新繪製自己(如果這樣選擇的話)是更好,更簡單,更實用的設計嗎?

順便說一句,我很清楚如何禁用從方位變化的影響,我的應用程序,但我真的不明白是這個設計的Android的原因

+1

這是一個編程問題。 Android愛好者更適合Android用戶。我將你的問題轉移到StackOverflow。 –

+0

最初是想在這裏發佈,但不知道它是否屬於。感謝您清除:) –

回答

1

不知道到底爲什麼,我的猜測是因爲它必須重新構建屏幕上的活動。

OnCreate接受一個變量「Bundle savedInstanceState」。您可以將數據保存在那裏以加快重新加載速度。

package com.android.hello; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class HelloAndroid extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mTextView = new TextView(this); 

     if (savedInstanceState == null) { 
      mTextView.setText("Welcome to HelloAndroid!"); 
     } else { 
      mTextView.setText("Welcome back."); 
     } 

     setContentView(mTextView); 
    } 

    private TextView mTextView = null; 
} 
8

在文檔, http://developer.android.com/guide/topics/resources/runtime-changes.html

它指出,

重啓行爲旨在幫助您的應用程序通過使用替代資源自動重裝應用程序適應新的配置。

+4

當它引起如此多的其他問題,如副作用(例如懸而未決的AsyncTasks,對話框不能無縫地繼續是目前爲止我遇到的一些問題)時,它並沒有真正的「幫助」。當所有實際需要的是屏幕上當前組件的重新繪製/佈局時,是否有一種簡單的方法來確保這一點(不會破壞和重新創建活動)? –

+5

不止需要重繪。 Android爲您提供了2種屏幕方向的不同資源(圖像,字符串,主題,樣式,佈局等)的功能。手動重新加載這些工作要比處理對話框和asynctasks更有效。 –

+2

嗯......正在銷燬和重新創建一個真正的「輕量級」活動,而不是讓應用程序重新加載它所需的任何額外資源? –

1

這很簡單。 Android會銷燬並重新創建一個關於方向更改的活動,以便您(開發人員)可以選擇繼續使用以前的佈局,或者使用和實現另一個佈局。

+1

你是對的,但理由是完全錯誤的在我的意見_。文檔陳述了有關摧毀的原因:'[..]可能因爲活動正在完成[..]而發生,或者因爲系統暫時銷燬此活動的實例以節省空間。這並不排除方向的變化,但它看起來很奇怪,就像這樣。迄今爲止,我已經能夠觸發'自然''破壞'的唯一方法就是旋轉屏幕。做一個「暫停」後跟一個「簡歷」對我來說似乎更合乎邏輯。另外,「簡歷」是一個不恰當的詞,但是不要說。 – pauluss86

相關問題