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

来源:互联网 发布:mac怎么打开html文件 编辑:程序博客网 时间:2024/06/05 16:55

项目中用到 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 {@Overridepublic 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 FinishListenerimplements DialogInterface.OnClickListener, DialogInterface.OnCancelListener, Runnable {private final Activity activityToFinish;public FinishListener(Activity activityToFinish) {this.activityToFinish = activityToFinish;}@Overridepublic void onCancel(DialogInterface dialogInterface) {run();}@Overridepublic void onClick(DialogInterface dialogInterface, int i) {run();}@Overridepublic void run() {activityToFinish.finish();}}

明白了吧! Activity 被 finish 掉了!(用别人的 东西还是要建立在熟悉了的基础上比较好)

最后附上  Zxing  框架结构分析:http://www.docin.com/p-499187165.html


0 0
原创粉丝点击