如果您是经验丰富的Android程序员,您可能知道屏幕方向会导致应用程序通过onSaveInstanceState()和onRestoreInstanceState保存和恢复。
您可能也会知道通过这些功能无法轻松恢复对象,例如,如果我按如下方式创建数据库连接:
SQLiteDatabase mydb = openOrCreateDatabase(dbn.trim().toLowerCase(), 0, null);
然后我按如下方式执行加载记录的查询:
Cursor rs = mydb.rawQuery("SELECT * FROM MY_TABLE where id>0", null);
之后我可以使用以下方式阅读下一个匹配记录:
rs.moveToNext();
现在这里出现了半坏消息......如果在我刚刚解释过的SQLite的一个secuential调用中,用户倾斜设备,一切都被删除然后恢复,除了包含结果集的Cursor之类的对象。所以,即使SQLite连接也会被重置!
现在,我知道可以在这些任务中锁定屏幕方向,无论是以编程方式还是通过Android Manifest。所以,没问题。
现在,对于坏消息......当您使用startActivityForResult()调用Intent时,您无法控制调用的功能的屏幕方向!因此,即使您专门配置应用程序以锁定方向,主机应用程序也会轮换。似乎没有直观的解决方法。
这导致从空指针到各种崩溃的一系列问题。
我无法控制用户何时完成secuential SQLite调用,或者当用户调用startActivityForResult()时,有没有办法避免这一切?我在想是否有办法以编程方式锁定整个设备的屏幕旋转....
答案 0 :(得分:2)
您可以覆盖配置更改,以便在屏幕旋转期间应用程序不会关闭。在你的清单部分,输入
android:configChanges="orientation|screenSize" >
当方向或屏幕大小发生变化而不是重新启动时,这将在您的应用中调用Activity.onConfigurationChanged()。
在我的应用中,我所做的就是这个(技术上并不需要):
@Override public boolean onConfigurationChanged (Configuration newConfig)
{
super.onConfigurationChanged (newConfig);
}
我不需要添加任何代码来刷新视图 - 它们会自动失效并重新生成。
有关详细信息,请参阅 http://developer.android.com/guide/topics/resources/runtime-changes.html