安卓三种换肤方案避免界面状态丢失

你好,你写的三种换肤方案的第一种,会导致界面状态丢失,如何避免能给个方案吗

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :线程安全问题的三种解决方案
  • 除此之外, 这篇博客: 安卓面试题中的 9、开启线程的三种方式? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    Java有三种创建线程的方式,分别是:

    继承Thread类

    public class FirstThread extends Thread {
    
        @Override
        public void run() {
           ...
        }
    }
    

    实现Runable接口

    public class SecondThread implements Runnable{
        public void run() {
            ...
        }
    }
    

    实现callable 接口

    public class Target implements Callable<Integer> {
        int i=0;
        public Integer call() throws Exception {
            ...
            return i;
        }
    }
    
    public static void main(String[] args) {
        Target t1=new Target();
        FutureTask<Integer> ft=new FutureTask<Integer>(t1);
        Thread t2=new Thread(ft,"新线程");
        t2.start();
        try {
            System.out.println(ft.get());
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    

    三种方式的对比

    1、采用实现Runnable、Callable接口的方式创建多线程时,

    优势是:

    线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。

    在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

    劣势是:

    编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。

    2、使用继承Thread类的方式创建多线程时,

    优势是:

    编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

    劣势是:

    线程类已经继承了Thread类,所以不能再继承其他父类。

    3、Runnable和Callable的区别

    (1) Callable规定(重写)的方法是call(),Runnable规定(重写)的方法是run()。

    (2) Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。

    (3) call方法可以抛出异常,run方法不可以。

    (4) 运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^