Zxingオープンソースプロジェクトを使用している間にActivityがオフになります
2168 ワード
プロジェクトではZxingを使用します.それは私のtabhostの重いactivityとして、プログラムがいつもわけがわからず閉鎖されていることに気づいた.
私はこの情報を見ました:GC_FOR_ALLOC freed 6785K, 11% free 44735K/49812K, paused 39ms, total 39ms
最初はどこが間違っているのか、メモリが溢れているのかと思っていました.最後にQRコードをスキャンしたこのactivityにロックし、ソースコードInactivityTimerクラスを見て驚いた!
FinishListenerクラス:
分かったでしょう.Activityはfinishに落とされた!(他人のものを使うのはやはり熟知した上で創立したほうがいいです)
最後にZxingフレームワークの構造分析を添付します.http://www.docin.com/p-499187165.html
私はこの情報を見ました:GC_FOR_ALLOC freed 6785K, 11% free 44735K/49812K, paused 39ms, total 39ms
最初はどこが間違っているのか、メモリが溢れているのかと思っていました.最後にQRコードをスキャンしたこのactivityにロックし、ソースコードInactivityTimerクラスを見て驚いた!
/**
* Finishes an activity after a period of inactivity.
*/
public final class InactivityTimer {
private static final class DaemonThreadFactory implements ThreadFactory {
@Override
public Thread newThread(Runnable runnable) {
final Thread thread = new Thread(runnable);
thread.setDaemon(true);
return thread;
}
}
private static final int INACTIVITY_DELAY_SECONDS = 5 * 60;
private final Activity activity;
private ScheduledFuture<?> inactivityFuture = null;
private final ScheduledExecutorService inactivityTimer =
Executors.newSingleThreadScheduledExecutor(new DaemonThreadFactory());
public InactivityTimer(Activity activity) {
this.activity = activity;
onActivity();
}
private void cancel() {
if (inactivityFuture != null) {
inactivityFuture.cancel(true);
inactivityFuture = null;
}
}
public void onActivity() {
cancel();
inactivityFuture = inactivityTimer.schedule(new FinishListener(activity),
INACTIVITY_DELAY_SECONDS,
TimeUnit.SECONDS);
}
public void shutdown() {
cancel();
inactivityTimer.shutdown();
}
}
FinishListenerクラス:
/**
* Simple listener used to exit the app in a few cases.
*
*/
public final class FinishListener
implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener, Runnable {
private final Activity activityToFinish;
public FinishListener(Activity activityToFinish) {
this.activityToFinish = activityToFinish;
}
@Override
public void onCancel(DialogInterface dialogInterface) {
run();
}
@Override
public void onClick(DialogInterface dialogInterface, int i) {
run();
}
@Override
public void run() {
activityToFinish.finish();
}
}
分かったでしょう.Activityはfinishに落とされた!(他人のものを使うのはやはり熟知した上で創立したほうがいいです)
最後にZxingフレームワークの構造分析を添付します.http://www.docin.com/p-499187165.html