美文网首页Android开发积累Android知识Android开发
Android 当子线程执行完,提交到主线程工具类

Android 当子线程执行完,提交到主线程工具类

作者: Demo_Yang | 来源:发表于2017-03-16 17:13 被阅读243次
    /**
         * 在主线程中 执行代码
         * 
         * @param runnable
         */
        public static void runOnUiThread(Runnable runnable) {
            // 如果在主线程中运行 直接运行 如果没有在 提交一个handler
            if (isRunUIThread()) {
                runnable.run();
            } else {
                executeTask(runnable);
            }
        }
     
        /**
         * 可以执行一个任务
         * 
         * @param runnable
         */
        public static void executeTask(Runnable runnable) {
            getHandlder().post(runnable);
        }
     
        /**
         * 延时执行的异步任务
         * 
         * @param runnable
         * @param delayMillis
         */
        public static void executeDelay(Runnable runnable, long delayMillis) {
            getHandlder().postDelayed(runnable, delayMillis);
        }
     
        private static Handler getHandlder() {
            return MyApplication.getHandler();
        }
     
        /**
         * 判断程序是否在主线程当中运行
         * 
         * @return
         */
        public static boolean isRunUIThread() {
            // myPid 当前的进程 myUid 当前的用户 myTid 当前的一个线程
            return android.os.Process.myTid() == getMainThreadId();
        }
     
        private static int getMainThreadId() {
     
            return MyApplication.getMainThreadId();
        }
    

    使用demo:

    // 实际上和handler一样 执行完上面的方法 把接下来的代码提交到主线程来执行
                UIUtiles.runOnUiThread(new Runnable() {
     
                    @Override
                    public void run() {
                        showPage();
                    }
                });
    

    取消一个异步任务

    /**
         * 取消异步任务
         * 
         * @param autoRunningTask
         */
        public static void cancelTask(Runnable r) {
            getHandlder().removeCallbacks(r);
        }
    

    使用方法

    @Override
            public void run() {
                //取消之前的任务
                UIUtiles.cancelTask(this);
                int currentItem = viewPager.getCurrentItem();
                currentItem++;
                // true 平滑的滑动到指定条目
                viewPager.setCurrentItem(currentItem, true);
                // this就是执行当前的任务 这是一个递归的过程
                UIUtiles.executeDelay(this, delayMillis);
            }
    
    

    相关文章

      网友评论

      • SmartSean:哥们,这个意义不是很大吧,直接Handler的post就行了,也不用多出一个工具类
        Demo_Yang:确实 本质就是 但是就是封装一下 用起来简介一些

      本文标题:Android 当子线程执行完,提交到主线程工具类

      本文链接:https://www.haomeiwen.com/subject/lrpjnttx.html