今回はbangaihenn的にOSのメモリ管理について注意点を記載します。
まずはActivityのソースから
ボタンが2つあって、それぞれ同じクラスにイベント登録しています。
次にイベント処理するクラスのソース
ボタン編でちらっと触れた方法です。
引数のViewからgetIdすると、どのボタンが押されたか分かります。
例ではif文で分けてますが、数が多ければswitchでやる事も多いです。
コードの解説ですが、ボタン1が押されたらstaticな変数testに値をセットします。
ボタン2が押されたらstaticな変数testのnullチェックをして、
nullなら「test is null」と表示
nullじゃなければ変数に入ってる値を表示します。
では動作イメージです。
先にボタン2を押下
次にボタン1を押下後すぐにボタン2を押下
時間をおいてボタン2を押下
nullになってる!Σ( ̄□ ̄;
*ホームボタンでバックグラウンドにして他のアプリを動かしたりしてください
(再現性は端末性能によります。)
ホームボタン押すからだろ!!って人のために
ボタン1→ボタン2→ホームボタン→すぐにボタン2
これが現実です。
onPauseでバックグラウンドになる時にメモリ解放
onRestartで再開時に再生成な作りが良いです。
staticでもfinalなら解放されないとの噂もありますが、
解放される前提でお行儀よく作りましょう。
(androidの開発で謎なヌルポが出たら、これが理由かも)




まずはActivityのソースから
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_toast);
Button btn = (Button)findViewById(R.id.test);
Button btn2 = (Button)findViewById(R.id.test2);
btn.setOnClickListener(new BtnExecute());
btn2.setOnClickListener(new BtnExecute());
}
ボタンが2つあって、それぞれ同じクラスにイベント登録しています。
次にイベント処理するクラスのソース
public class BtnExecute implements View.OnClickListener
{
private static String test;
public void onClick(View v)
{
if(R.id.test == v.getId()){
test = "Button1";
} else {
if(null == test){
Toast.makeText(v.getContext(), "test is null", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(v.getContext(), test, Toast.LENGTH_LONG).show();
}
}
}
}
ボタン編でちらっと触れた方法です。
引数のViewからgetIdすると、どのボタンが押されたか分かります。
例ではif文で分けてますが、数が多ければswitchでやる事も多いです。
コードの解説ですが、ボタン1が押されたらstaticな変数testに値をセットします。
ボタン2が押されたらstaticな変数testのnullチェックをして、
nullなら「test is null」と表示
nullじゃなければ変数に入ってる値を表示します。
では動作イメージです。
先にボタン2を押下
次にボタン1を押下後すぐにボタン2を押下
時間をおいてボタン2を押下
nullになってる!Σ( ̄□ ̄;
*ホームボタンでバックグラウンドにして他のアプリを動かしたりしてください
(再現性は端末性能によります。)
ホームボタン押すからだろ!!って人のために
ボタン1→ボタン2→ホームボタン→すぐにボタン2
これが現実です。
onPauseでバックグラウンドになる時にメモリ解放
onRestartで再開時に再生成な作りが良いです。
staticでもfinalなら解放されないとの噂もありますが、
解放される前提でお行儀よく作りましょう。
(androidの開発で謎なヌルポが出たら、これが理由かも)



