スリープから復帰したときの画面解像度に関して。

756 views
Skip to first unread message

rinda

unread,
Mar 21, 2012, 6:52:15 AM3/21/12
to 日本Androidの会
どうもrindaと申します。
質問失礼致します。

現在横向きlandscapeのゲームを開発していて
onResumeメソッドでWindowManagerより画面解像度を取得する
という事をやっているのですが
スリープから復帰したときに画面解像度がおかしくなります。

具体的に何が起こっているかを下記に示します。
・アプリを横向きlandscapeで起動。このときWindowManagerは横800、縦480で解像度を返す。

・端末をスリープモードに

・端末をスリープモードから解除

・アプリのonResumeメソッドで画面解像度を取得。このときWindowManagerは横480、縦800で解像度を返す。


理想としては、最初に横向きlandscapeで設定しているので
ちゃんと横800、縦480で解像度が返ってきてほしいです。

なお、スリープモードにせず
一旦ホーム画面などに移動してアプリを再度呼び出してonResumeを呼び出した場合は
ちゃんと横800、縦480の値が返ってきます。

どなたか解決方法をご存知の方お教え頂けないでしょうか。

MORIHIRO

unread,
Mar 21, 2012, 8:21:08 AM3/21/12
to android-g...@googlegroups.com
onResume()の替わりに、onWindowFocusChanged()で処理するのでは
タイミング的に遅すぎますか?


2012年3月21日水曜日19時52分15秒 UTC+9 rinda:

mokkouyou

unread,
Mar 21, 2012, 9:13:49 AM3/21/12
to android-g...@googlegroups.com
mokkouyouです。

根本的な解決は別として一旦初期化がうまくいっているのであれば、
復元時には再度取得しないようにしてはいかがでしょうか?


2012年3月21日21:21 MORIHIRO <morihi...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/w3i3eanTMp8J
> にアクセスしてください。
>
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。

--
mokkouyou
mokk...@gmail.com

rinda

unread,
Mar 21, 2012, 9:18:38 PM3/21/12
to 日本Androidの会
初めまして。コメントありがとうございます!

> onResume()の替わりに、onWindowFocusChanged()で処理するのでは
> タイミング的に遅すぎますか?
残念ながら遅いです。。
onResumeで取らないといけないのです。。

rinda

unread,
Mar 21, 2012, 9:29:00 PM3/21/12
to 日本Androidの会
初めまして。コメントありがとうございます。

> 根本的な解決は別として一旦初期化がうまくいっているのであれば、
> 復元時には再度取得しないようにしてはいかがでしょうか?
確かにそうなのですが、今回開発に使っているフレームワークがonResumeで画面解像度の取得を行うため対策を考えています。
現状起こっている問題をより具体的に示しますと。。

・スリープにする

・30分くらい放置。GCが走り、オブジェクトが破棄される。

・スリープから復帰。

・onResumeが走り、フレームワークがオブジェクトの再作成を行うため画面解像度の再取得を行う。
 このとき横480、縦800で返ってくる。

GCが走らなければ
フレームワークはアプリ起動時に取得した画面解像度で動くので特に問題はないのですが
GCが走った場合、上記のような問題が起こります。

私としては、マニフェストに横向きlandscapeの指定をしているので問題ないと思っていたのですがそうではないようです。。
どこか別の場所で指定する方法はないものでしょうか。。

kacodama

unread,
Mar 22, 2012, 1:40:52 AM3/22/12
to android-g...@googlegroups.com
マニフェストで画面の向きの変更を無効化し、
android:configChanges = "keyboard|keyboardHidden|orientation"

Activity#onConfigurationChangedを以下のようにオーバーライドするとどうなりますか?

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}

rinda

unread,
Mar 22, 2012, 5:26:45 AM3/22/12
to 日本Androidの会
kacodama さん

コメントありがとうございます。

> マニフェストで画面の向きの変更を無効化し、
> android:configChanges = "keyboard|keyboardHidden|orientation"
こちらは既にやっているのですが、スリープから復帰した際はこの設定はきかないようです。

> Activity#onConfigurationChangedを以下のようにオーバーライドするとどうなりますか?
>
> @Override
> public void onConfigurationChanged(Configuration newConfig) {
> super.onConfigurationChanged(newConfig);
こちらで試してみたところ
スリープにした時点で、newConfigがorientation 1(縦向き)になっておりました。
復帰してアプリを表示した時点では2(横向き)になりました。

このメソッドが呼ばれた時点では
正しい画面の向き、解像度が返ってくるようなので
その時点でフレームワークに解像度の情報を与えてやって今回の対応をやろうと思います。

アドバイスありがとうございました。
Reply all
Reply to author
Forward
0 new messages