***
まず、自分がネット上の資料に穴をあけられたと言わざるを得ない.
そこで、インターネットで資料を調べて、縦横画面を切り替えてActivityがonCreateなどのライフサイクルを再開しないようにする方法を見てみましょう.
この方面の資料は多くて、すぐに検索しました.結果は次のとおりです.
1、まずMainifest.xmlのActivity要素にandroid:configChanges="orientation|keyboardHidden"属性を追加
2、onConfigurationChangedを書き換える
その時、私は大功が成し遂げられたと思って、コードが貼ると終わりました.結果は役に立たないことに気づいた!ログを印刷してonConfigurationChangedメソッドに入っていないことに気づき、
逆にonCreateに入りました.この时、私は混乱して、これは約束とは違います!
ここはツッコミを入れなければならなくて、ネット上の資料は千編一律で、句読点さえ変わっていません!これらの投稿者は一字も打っていないのに、オリジナルを書いたなんて、ちぇちぇ!
さあ、本題に戻ります.私は長い間苦労して、やっと1篇の転載ブログを見つけました:クリックしてリンクを開けます(転載に注意して、どんなに道徳的です!)
いくつかのポイントを切り取ります.
android 3から2以降、このように設定すると、onConfigurationChanged()ではなく、画面を回した後もOnCreate()が呼び出されます.frameworkレイヤコードを追跡すると、googleがandroid 3にあるため、問題が見つかります.2ではscreensize変更の通知が追加されており、画面を回す際にorientationが変更されただけでなくscreensizeも変更されたが、onConfigurationChangedを呼び出すかOnCreateを呼び出すかを判断する際には、以下の判断が採用されている.
int diff = activity.mCurrentConfig.diff(config);
if (diff != 0) {
//If this activity doesn't handle any of the config changes then don't bother calling onConfigurationChanged as we'regoing to destroy it.
if ((~activity.mActivityInfo.getRealConfigChanged() & diff) == 0) {
shouldChangeConfig = true;
}
}
public int getRealConfigChanged() {
return applicationInfo.targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB_MR2 ? (configChanges | ActivityInfo.CONFIG_SCREEN_SIZE
| ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE) : configChanges;
}
以上の解析から,この問題を解決する方法は2つあることが分かった:(AndroidManifest.xmlを修正するだけでよい)
1.android:configChanges="keyboardHidden|orientation|screenSize"を指定し、他のコードは以前のコードと同じように処理します.
2.AndroidManifest.xmlでtargetSdkValersonを3.2以前のバージョン(3.2のバージョン番号は13)と指定すると、screenSizeプロパティ値が自動的に加算されます.
例:
最初の方法をお勧めします.
何も言わないで、問題は解決しました.同じ問題に遭遇した人に役に立つことを望んでいます!
そこで、インターネットで資料を調べて、縦横画面を切り替えてActivityがonCreateなどのライフサイクルを再開しないようにする方法を見てみましょう.
この方面の資料は多くて、すぐに検索しました.結果は次のとおりです.
1、まずMainifest.xmlのActivity要素にandroid:configChanges="orientation|keyboardHidden"属性を追加
2、onConfigurationChangedを書き換える
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// :
if (this.getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE) {
// ,
}
else if (this.getResources().getConfiguration().orientation
== Configuration.ORIENTATION_PORTRAIT) {
// ,
}
}
その時、私は大功が成し遂げられたと思って、コードが貼ると終わりました.結果は役に立たないことに気づいた!ログを印刷してonConfigurationChangedメソッドに入っていないことに気づき、
逆にonCreateに入りました.この时、私は混乱して、これは約束とは違います!
ここはツッコミを入れなければならなくて、ネット上の資料は千編一律で、句読点さえ変わっていません!これらの投稿者は一字も打っていないのに、オリジナルを書いたなんて、ちぇちぇ!
さあ、本題に戻ります.私は長い間苦労して、やっと1篇の転載ブログを見つけました:クリックしてリンクを開けます(転載に注意して、どんなに道徳的です!)
いくつかのポイントを切り取ります.
android 3から2以降、このように設定すると、onConfigurationChanged()ではなく、画面を回した後もOnCreate()が呼び出されます.frameworkレイヤコードを追跡すると、googleがandroid 3にあるため、問題が見つかります.2ではscreensize変更の通知が追加されており、画面を回す際にorientationが変更されただけでなくscreensizeも変更されたが、onConfigurationChangedを呼び出すかOnCreateを呼び出すかを判断する際には、以下の判断が採用されている.
int diff = activity.mCurrentConfig.diff(config);
if (diff != 0) {
//If this activity doesn't handle any of the config changes then don't bother calling onConfigurationChanged as we'regoing to destroy it.
if ((~activity.mActivityInfo.getRealConfigChanged() & diff) == 0) {
shouldChangeConfig = true;
}
}
public int getRealConfigChanged() {
return applicationInfo.targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB_MR2 ? (configChanges | ActivityInfo.CONFIG_SCREEN_SIZE
| ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE) : configChanges;
}
以上の解析から,この問題を解決する方法は2つあることが分かった:(AndroidManifest.xmlを修正するだけでよい)
1.android:configChanges="keyboardHidden|orientation|screenSize"を指定し、他のコードは以前のコードと同じように処理します.
2.AndroidManifest.xmlでtargetSdkValersonを3.2以前のバージョン(3.2のバージョン番号は13)と指定すると、screenSizeプロパティ値が自動的に加算されます.
例:
最初の方法をお勧めします.
何も言わないで、問題は解決しました.同じ問題に遭遇した人に役に立つことを望んでいます!