美文网首页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);
        }

相关文章

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

    使用demo: 取消一个异步任务 使用方法

  • 关于线程安全问题

    一、 通过线程池创建A,B,C三个子线程,并设置A子线程执行1秒;B子线程执行3秒; C子线程执行7秒。要求:①主...

  • 每日一结——CountDownLatch

    简介 CountDownLatch是一个同步工具类,它允许一个线程或多个线程一直在等待,直到其他线程执行完后再执行...

  • Android 的线程和线程池

    Android 的线程分为主线程和子线程。 主线程更新 UI 子线程执行耗时操作 AsyncTask封装了线程池和...

  • join()方法和yield()方法

    join():当A线程执行到了B线程的 .join()方法时,A就好等待,当B线程都执行完,A才会执行。 join...

  • 因为我对Handler的了解,居然直接给我加了5K?!

    1 Handler是什么? android提供的线程切换工具类。主要的作用是通过handler实现从子线程切换回主...

  • JAVA多线程-CountDownLatch计数器

    一、概述 CountDownLatch是一个同步工具类,它允许一个或多个线程等待其他线程执行完操作之后再继续执行。...

  • CountDownLatch

        CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。 ...

  • Android-AsyncTask[异步任务]

    AsyncTask是android提供的一个执行异步耗时工作并将结果返回主线程的类,内部通过线程池管理开启的子线程...

  • GCD延时

    在主线程中延迟执行某动作,不会卡主主线程,不影响后面的东做执行 在子线程中执行某动作,不会卡主整个线程

网友评论

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

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

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