クリーンな状態から最初にアプリに入った後のハンドラーの内部では、ハンドラーはMSG_PULLEDアクションを処理しますが、mainへの参照はnullです。弱参照はnullではありません。どうしてこれが起こっているのでしょうか?
この投稿に触発されました:このHandlerクラスは静的である必要があります。そうでない場合、リークが発生する可能性があります:IncomingHandler
static class MainHandler extends Handler {
private final WeakReference<MainActivity> wMain;
static int angle=0;
public MainHandler(MainActivity main) {
super();
this.wMain = new WeakReference<MainActivity>(main);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
MainActivity main = wMain.get();
int what = msg.what;
if(what == MSG_PULLED) {
main.startAnim();
}
}
}
そして、私がハンドラーを開始する方法:
static MainHandler mainHandler;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainHandler = new MainHandler(this);
mainHandler.sendEmptyMessageDelayed(MSG_PULLED,500);
}