Toast が固まるのを回避する


Toast は、キューに積まれています。
Toast を複数回実行すると、順番に表示されます。
ところが、連続する回数が多いと、Toast が消えなくなる (固まる) 現象を起こします。

これを回避するには、新しい Toast を実行する際には、前の Toast をキャンセルする必要があります。
AlarmClockToastMaster.java で実装されています。

Toast#cancel() の処理ですが、Android 1.6 (Donut) では、
表示を消すだけで、キューは残っています。
ということで、気休め程度の効果しかない感じです。

public void cancel() {
	mTN.hide();
	// TODO this still needs to cancel the inflight notification if any
}

Android 4.1 (Jelly Bean) から、キューを消す処理が入りました。
エミュレータで試すと、期待した動きをします。

public void cancel() {
	mTN.hide();
	try {
		getService().cancelToast(mContext.getPackageName(), mTN);
	} catch (RemoteException e) {
            // Empty
	}
}

サンプルコードは google code に置いています。

参考
Android Toastが固まるのを回避する方法 – Taosoftware

関連記事
Toast の移植
・Toast が固まるのを回避する
Toast の文字を大きくする
Toast の表示時間を変更する


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です