2012-07-11 276 views
1

我在我的應用程序中出現屏幕異化問題。我在橫向模式的res/layout-lan文件夾中創建了一個備用佈局。問題發生在方向更改期間,處理屏幕方向 - Android

1.在不破壞舊活動的情況下重新創建活動。

2.since我在我的應用程序中使用媒體播放器,在屏幕上旋轉的.MP3播放兩個方向同時..

我無法找到用於處理屏幕方向與保存和恢復正確的代碼示例活動狀態..............

回答

0

當屏幕方向按以下步驟更改時,您可以停止活動的重新開始。

組configChanges標籤如以下的方法

<activity android:name=".Activity_name" 
      android:configChanges="orientation|keyboardHidden"> 

使用。

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
    // to do on orientation changed   
    } 
    } 
+1

OP請注意,如果使用此方法,則必須手動再次調用'setContentView()'以便選取和繪製替代佈局。默認情況下,它只會旋轉「活動」並保持相同的佈局。 – Devunwired 2012-07-11 18:32:43

+0

我把景觀佈局放在佈局土地文件夾.......你能告訴我如何避免這種方法的活動娛樂...... – user632475 2012-07-12 12:56:34

+0

在onCOnfichange你可以檢查它是哪個方向,並做需要 – AAnkit 2012-07-12 13:23:46

0
     v 

創建文件夾RES /佈局土地

相反RES /於版圖LAN <的----把這裏d在文件夾名稱

3

1.在不破壞舊活動的情況下重新創建活動。

當發生配置更改時,Activity的重新創建是Android的自然默認行爲。您的舊Activity在內存中逗留的可能原因是因爲它正在引用當前正在播放的MediaPlayer實例。

因爲您正在使用橫​​向和縱向的不同佈局資源,所以讓Android重新創建活動並每次提取適當的資源對您有利。如果你自己處理旋轉,你將負責重新加載正確的佈局。

2.since我在我的應用程序中使用媒體播放器,在屏幕上旋轉的.MP3播放兩個方向同時..

有兩個解決這個問題...

理想的解決方案是將媒體播放移動到ServiceActivity可以撥打Service開始/停止/等。在用戶指導下播放,但將其放入後臺組件(如Service)中,即使您的Activity由於更改而發生變化,也可以繼續操作。這是Android團隊鼓勵的設計模式,您的Activity真的只處理用戶界面。

另一個可行的解決方案是使用onRetainNonConfigurationInstance()將您的MediaPlayer從舊的Activity傳遞到新的。這允許單個MediaPlayer存在於Activity實例之間,保持播放一致。例如:

public class MyActivity extends Activity { 
    private MediaPlayer mPlayer; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //Check if we have a player passed in from the last instance 
     mPlayer = (MediaPlayer)getLastNonConfigurationInstance(); 
     //If not, make a new one 
     if (mPlayer == null) { 
      mPlayer = new MediaPlayer(); 
      //...Set up new player instance... 
     } 
    } 

    @Override 
    public Object onRetainNonConfigurationInstance() { 
     //Clear our member variable to guarantee this Activity 
     // is allowed to GC after onDestroy() 
     MediaPlayer instance = mPlayer; 
     mPlayer = null; 
     //Hand our current player up to the next Activity to be created 
     return instance; 
    } 

} 

另一種選擇,以保證最佳的內存清理是定義mPlayerWeakReference<MediaPlayer>允許權利要求老Activity的氣相色譜儀,即使MediaPlayer是在配置更改時播放音頻。

+0

謝謝....您的示例在我的應用程序中工作正常... – user632475 2012-07-12 14:53:51

+0

樂於幫助。如果這個答案對您有用,請隨時接受或註冊。乾杯! – Devunwired 2012-07-12 14:54:56

+0

在我的應用程序中有兩個Mediaplayer像mplayer和mplayer1。我可以同時保留這兩個實例..... – user632475 2012-07-14 15:57:04