在使用 Zxing 开源项目的时候 Activity 关闭

项目中用到 Zxing ; 它作为我tabhost重的一个 activity ,发现 程序总是莫名其妙的被关闭掉;

我看到这个信息:GC_FOR_ALLOC freed 6785K, 11% free 44735K/49812K, paused 39ms, total 39ms

起初我还以为是哪里报错了,或者哪里有内存溢出;最后 锁定在了  扫描二维码 的这个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


你可能感兴趣的:(Android基础知识)