開発者オプションの挙動メモ
自メモ)
- アクティビティを保持しない/バックグラウンドプロセスを使用しない
☆)アクティビティを保持しない/バックグラウンドプロセスを使用しない
@kimukou2628 開発者オプションのヤツですか?
@bina1204 はい。それがバグ報告で上がってきましたorz(まあ確かにアプリ内課金のテストも それでやるべき って話もzakiさんあたりが TLでおっしゃられていたのでテスト漏れではあったのですが。。。<汗
2013-09-11 10:32:10 via YoruFukurou to @bina1204
@kimukou2628 課金が絡むとしたら対応しないといけないですね…。この Activity は必ず保持する、ってできないんですかね
うーん。とりあえず状況的にはデバッガでonResume/onPause あたりで止める と表示されることは分かった。でも普通に動かすと表示が一瞬動作してfinishするような挙動。。タイミング?(しかも特定のアプリだけなのが謎。。。なんだろうこれ。。。。)
動いてる差分と動いてない差分が、Googleplayservice使ってるか否かぐらいの差分しか分からん(>_<)openGLが別activity(Ad)に影響与える話はあまり聞いたこと無いしな?(^-^;)
- [バックグラウンドプロセスを使用しない]
に関しては特に挙動の変化は見られないんだけど、うーんServiceとか使ってないからだろうか?
うーん、今日調べてた片方の方- アクティビティ保持しない をスプラッシュにViewStub使ってるプログラムに試してみたけどActivity遷移で 何回もonCreateが走りまくって =>java.lang.IllegalArgumentException とか出る(汗
Activity間遷移すると static領域を全破棄,singleTask指定しててもActiviy自体を中途半端に破棄してるので再作成でエラーが出ると。端末が軽くなるよ〜 みたいな話で試す人もいるかもだしな(汗 URL な記載ブログも
Android3から観測してるんだけど(Android4も含め)、なんか初期化が複数回くる事があって其の条件がよく分かんない。getParent() してremoveAllView()してからじゃないとaddViewしただけで同じエラーが出ることよくあるし
「アクティビティを保持しない」に関しては
ここらへんは試作プログラムだと2箇所引っかかった
- 本体側のViewStubに関しては、setContentViewしても2回目はNullで参照されるようなので、其の場合はアクセスしない
stub = (ViewStub)findViewById(R.id.splash); if(stub==null)break; //☆ココを追加 stub.postDelayed(new Runnable(){ public void run() { } },100);
みたいなコードを呼ぶと致命的エラーになるみたい。
☆の箇所は ViewStubを使ったロゴ表示テスト - exception think
ではたまに発生する形だったけど、これが必ず発生する挙動になるのが今回の挙動。
上記の場合もMemory足りなくて破棄されてた&中途半端に値が残ってる状態だったのかな?
- MainProjectの Activity関連のstatic領域は破棄されてる*1
- LibraryProjectを使ってると、こちらのstatic領域は破棄されない
- コレに対してremoveViewすると致命的エラーで落ちるので
ViewGroup parent = (ViewGroup)layout.getParent();
parent.removeAllViews();
//parent.removeView(vx);//vxは子供View
と変更*2
さらにViewFlipperを使ってるとActivity遷移時に
[ViewFlipper : Receiver not registered]というエラーが出る
- android - View Flipper Throws Exception in ViewFlipper.onDetachedFromWindow - Stack Overflow
- android - ViewFlipper : Receiver not registered - Stack Overflow
で書いてるように ViewFlipperをextendsして下記の
onDetachedFromWindowを上書きしろとのこと。まあ動くので気持ち悪いけど放置も手か。。*3
@Override protected void onDetachedFromWindow() { try { super.onDetachedFromWindow(); } catch (IllegalArgumentException e) { //stopFlipping(); //☆ココをコメントアウト } }
まあ日本の有名な方だと
「え?ViewFlipper?今はFragment.replaceでやらないと駄目だろ」
って話題にも載らない古い技術だしな。。。(汗
TL上のメモ)
開発者オプションをちゃんと分かってて使ってるんだろうか? 【ICSレポート】GX初期設定の補足とデフォルトブラウザを使いこなす :: トムとケリー。|yaplog!(ヤプログ!)byGMO : URL
2013-09-11 10:30:17 via web
アクティビティが保持されないようにしたら startActivityForResult は動かないんじゃね?
2013-09-11 10:32:36 via web
こいつか ALWAYS_FINISH_ACTIVITIES URL
2013-09-11 10:41:46 via web
ActivityManagerService の setAlwaysFinish は権限的に使えるのかな
2013-09-11 10:49:44 via web