Forcing Android to not redraw activity on orientation change

南笙酒味 提交于 2019-11-28 13:03:32

Yes, you can add attribute android:configChanges="orientation" to the activity declaration in the AndroidManifest.xml file.

EDIT: The purpose of the android:configChanges attribute is to prevent an activity from being recreated when it's really necessary. For example the Camera application uses this attribute because it the camera preview screen mustn't be recreated when an orientation change happens. Users expect the camera preview to work without any delays when they rotate their devices and camera initialization is not a very fast process. So it's kind of a native behavior for the Camera application to handle orientation changes manually.

For most applications it doesn't really matter if an activity is recreated or not during orientation changes. But sometimes it's more convenient to persist an activity during this process because of slow activity creation, asynchronous tasks performed by an activity or some other reasons. In this case it's possible to tweak an application a little and to use the android:configChanges="orientation" attribute. But what is really important to understand when you use this tweak is that you MUST implement methods for saving and restoring a state properly!

So to sum up this answer, the android:configChanges can allow you to improve the performance of an application or to make it behave "natively" in some rare cases but it doesn't reduce the amount of code you have to write.

But my activity does a lot and different kind of network activities at different times and if the orientation is changed when the network activity is being performed, I'll have to handle a lot of different and complex scenarios.

Then move that logic out of the activity and into a service.

Tima

Yes, you can add attribute android:configChanges="orientation" to the activity declaration in the AndroidManifest.xml file.

IMHO, it's better to declare android:configChanges="orientation|keyboard|keyboardHidden"

About the blog post you gave the link in another answers. I guess here is the answer:

If your application doesn't need to update resources during a specific configuration change and you have a performance limitation that requires you to avoid the Activity restart, then you can declare that your Activity handles the configuration change itself, which prevents the system from restarting your Activity.

I spoke as well with an android developer about this problem. And he meant following. If you don't have different layouts for landscape and portrait orientation, you can easy use configChanges.

I solved my problem by adding this to my activity in my manifest file

android:configChanges="keyboardHidden|orientation|screenSize"

Femi

Just answered this question earlier: Android - screen orientation reloads activity

In your case you want to completely prevent Android from killing your Activity. You'll need to update your manifest to catch the orientation change, then implement the orientation change callback to actually do whatever you need to do (which may be nothing) when an orientation change occurs.

if you are doing a lot of networking inside Asynchronous task maybe you should use onRetainNonConfigurationInstance() ans then get the data back in your onCreate() method like this tutorial or this

Niranj Patel

add android:configChanges="orientation" to your activity in manifest and add this code in your activity class and check..i hope it will help for you.

@Override
public void onConfigurationChanged(Configuration newConfig)
    {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.main);
}

this method will be called when orientation is changed nothing else if u don't want to change anything let it be blank

Vaayu

android:screenOrientation="portrait" in the activity tag in the manifest will lock your orientation.

Check this link for more inforation.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!