開発者オプションの挙動メモ


自メモ)

  1. アクティビティを保持しない/バックグラウンドプロセスを使用しない



☆)アクティビティを保持しない/バックグラウンドプロセスを使用しない

  • [バックグラウンドプロセスを使用しない]

に関しては特に挙動の変化は見られないんだけど、うーんServiceとか使ってないからだろうか?


「アクティビティを保持しない」に関しては
ここらへんは試作プログラムだと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]というエラーが出る

で書いてるように ViewFlipperをextendsして下記の
onDetachedFromWindowを上書きしろとのこと。まあ動くので気持ち悪いけど放置も手か。。*3

   @Override
    protected void onDetachedFromWindow() {
        try {
            super.onDetachedFromWindow();
        }
        catch (IllegalArgumentException e) {
            //stopFlipping(); //☆ココをコメントアウト
        }
   }

まあ日本の有名な方だと
「え?ViewFlipper?今はFragment.replaceでやらないと駄目だろ」
って話題にも載らない古い技術だしな。。。(汗



TL上のメモ)

*1:中途半端に

*2:広告とか同じViewをAddViewし直すと致命的なエラーが出るので、addViewする前に自前に削除する処理はよく書く

*3:minSDK 7だとでないらしい<下記の部分コメント うーん。でもAndroid4のオプションなんですが。。minSDKの使用イマイチわからん。。。