在我的Activity中,需要在onDestroy()中销毁一些外部事物(服务).但是当配置发生变化时(例如键盘翻转),我不希望这样,因为它会立即恢复.
所以问题是:如何区分onDestroy()是否是由Back-key press或部分配置更改过程引起的?
在@ CommonsWare的回答之后它会很简单)类似于:
@Override
onDestroy() {
if (mIsChangeConfig == true) {
mIsChangeConfig = false:
} else {
stopService();
}
}
@Override
onRetainNonConfigurationInstance() {
mIsChangeConfig = true;
}
Run Code Online (Sandbox Code Playgroud) 我有一个启动AsyncTask的Activity.允许活动以纵向或横向显示.更改方向时,将销毁并重新创建活动.无论方向改变多少次,任务都会继续工作.它还将结果成功返回给活动(根据CommonsWare的答案http://goo.gl/WF1yW).
我想要实现的是:当活动因应用程序关闭而被销毁时 - 应该取消任务.但是,当活动因方向更改而被销毁时- 不应取消任务.
基本上问题是如何区分这两种情况:应用是关闭/方向改变.在这两种情况下都会调用onDestroy()方法,并且没有简单的方法可以检查isChangingOrientation()...
PS如果有必要,我也可以考虑采用完全不同的方法.
嗨,我有4个标签的Android APP(让我们说tab1,tab2,tab3,tab4).当活动开始时,默认选项卡是tab1.我切换到任何其他选项卡(tab2,3或4)并更改屏幕方向,它总是重置为默认选项卡(tab1).
我尝试使用以下代码:
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
createView();
}
Run Code Online (Sandbox Code Playgroud)
在createView()里面我有:
private void createView()
{
... // Tabs are created before
tabHost.getTabWidget().setCurrentTab(CurrentTab);
}
Run Code Online (Sandbox Code Playgroud)
CurentTab 是private int并且默认设置为0,但它在TabChange上设置:
public void onTabChanged(String tabId) {
... some code
CurrentTab = tabHost.getCurrentTab();
}
Run Code Online (Sandbox Code Playgroud)
我在这里堆积......有没有其他方法可以解决这个问题?
简而言之: 我希望Tab在屏幕旋转时不会更改为默认值...