how to implement onRetainNonConfigurationInstance

2020-03-02 04:49发布

i made a media player in android it's working great but when i change the screen orientation, the activity is being restarted i know that this question was already asked on stackoverflow several times but none of the answers helped me. i think i should use: onRetainNonConfigurationInstance

    @Override 
public Object onRetainNonConfigurationInstance() { ... }

but i didn't know the correct way to implement it so if someone could give me a tutorial or an implicit example i would be grateful

3条回答
▲ chillily
2楼-- · 2020-03-02 05:11

I believe that onRetainNonConfigurationInstance() is deprecated. It will tell you to use Fragments instead. Here is a link to the Fragment documentation. Basically, you will put your UI and data into a custom Fragment, then use the FragmentManager to store an instance of your Fragment. Then, when the activity restarts, you can fetch your Fragment and reposition as needed.

查看更多
何必那么认真
3楼-- · 2020-03-02 05:13

In my media player, in order not to re-create MediaPlayer completely, I did the following:

1) In AndroidManifest.xml added

<activity
        android:name=".MainActivity"
        android:configChanges="orientation|screenSize">

2) Inside the MainActivity added

 @Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setSize(mVideoWidth, mVideoHeight);
}

I hope this helps someone.

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2020-03-02 05:25

Never mind that it's deprectated, it works fine. Simplest would be:

public Object onRetainNonConfigurationInstance() {
   return this;
}

Then in YourActivity's onCreate()

public void onCreate(Bundle savedState)
{
   YourActivity prevActivity = (YourActivity)getLastNonConfigurationInstance();
   if(prevActivity!= null) { 
       // So the orientation did change
       // Restore some field for example
       this.myValue = prevActivity.myValue;
   }
}
查看更多
登录 后发表回答