2012-07-11 285 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