【Android】异步加载布局探索
最近在做的项目页面复杂导致布局嵌套多层,而且又使用了百分比布局(可能主要是这个原因)导致页面加载的时候主线程会被阻塞,
那要想减少主线程阻塞,一来就是简化布局,减轻LayoutInflater的负担,二来就是异步加载布局。
项目当中用了rxjava,于是直接写个异步加载的工具类
public class InflaterUtil {
public static void ansycInflate(final Context context, final int resource, @Nullable final ViewGroup root, final boolean attachToRoot, final AsyncInflate asyncInflate) {
Observable
.create(new ObservableOnSubscribe<View>() {
@Override
public void subscribe(ObservableEmitter<View> emitter) throws Exception {
View view = LayoutInflater.from(context).inflate(resource, root, attachToRoot);
emitter.onNext(view);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<View>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(View view) {
if (asyncInflate != null) asyncInflate.success(view);
}
@Override
public void onError(Throwable e) {
MLog.e(e.toString());
}
@Override
public void onComplete() {
}
});
}
}
在子线程加载布局为View对象,然后在主线程把view返回,来更新UI。
需要注意,在有些机型上,异步加载布局会在主线程的looper创建完成之前调用,所以依赖与handler和looper的view,
会出现异常,比如SurfaceView,TextClock等等。
对于这些view,可以这样处理,先使用ViewStub占位,等view异步加载完成后,再调用ViewStub的inflate方法来初始化。
布局文件占位
<ViewStub
android:id="@+id/stub_slogan"
android:layout="@layout/layout_slogan"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
java代码动态初始化
InflaterUtil.ansycInflate(getContext(), R.layout.layout_top_left, leftContainer, true, new InflaterUtil.AsyncInflate() {
@Override
public void success(View view) {
final ViewStub stub_slogan = view.findViewById(R.id.stub_slogan);
stub_slogan.setOnInflateListener(new ViewStub.OnInflateListener() {
@Override
public void onInflate(ViewStub stub, View inflated) {
// scrollTextView = view.findViewById(R.id.scrollText);
sloganTextView = view.findViewById(R.id.tv_slogan);
}
});
}
});
这样就可以了
【Android】异步加载布局探索的更多相关文章
- 演化理解 Android 异步加载图片
原文:http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038738.html#3018499 在学习"Android异步加载图像小结&q ...
- [转载]Android 异步加载解决方案
2013-12-25 11:15:47 Android 异步加载解决方案,转载自: http://www.open-open.com/lib/view/open1345017746897.html 请 ...
- 演化理解 Android 异步加载图片(转)
演化理解 Android 异步加载图片(转)http://www.cnblogs.com/CJzhang/archive/2011/10/20/2218474.html
- 实例演示Android异步加载图片
本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...
- 实例演示Android异步加载图片(转)
本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...
- Android异步加载
一.为什么要使用异步加载? 1.Android是单线程模型 2.耗时操作阻碍UI线程 二.异步加载最常用的两种方式 1.多线程.线程池 2.AsyncTask 三.实现ListView图文混排 3-1 ...
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
Android 高手进阶(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处http://blog.csdn.net/xiaanming/article/details ...
- android 异步加载框架 原理完全解析
一.手写异步加载框架MyAsycnTask(核心原理) 1.我为大家手写了一个异步加载框架,涵盖了异步加载框架核心原理. MyAsycnTask.java import android.os.Hand ...
- [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html 这个可以实现ImageView异步加载 ...
随机推荐
- 深入Session2
一.分布式环境Session的处理方法 分布式环境下要保持会话跟踪最简单的方式是只依靠客户端Cookie保存,不过大多数情况下还需要用到Session,一般的处理方式如下: 1.Session复制 每 ...
- 数字证书的理解以及自建CA机构颁发证书
一.理解什么是数字证书 http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 理解数字证书等概念,无数次想好好看 ...
- Can't parse message of type "gazebo.msgs.Packet" because it is missing required fields: stamp, type
在gazebo的仿真环境中,采用强化学习HER算法训练baxter执行reach.slide和pick and place任务. 运行HER算法,此时尚未启动gazebo仿真环境,出现如下报错: [l ...
- Flask--(登录注册)抽取视图函数
视图函数抽取: 在info目录下准备视图业务模块包:modules 在modules中添加首页模块包index 在index包的__init__中导入蓝图 在index的__init__创建蓝图 在i ...
- C#编程经验-function advanced params
function advanced params:outrefparamsnot useful,to use them is a burden,so i dont use themdefects:ou ...
- Python 面向对象(三)
继承的实现原理 Python支持多继承 多继承的时候 属性查找的顺序 研究经典类和新式类在属性查找的不同 主要是形成菱形关系才有深度跟广度 广度优先 Python的继承原理 Python3的内置方 ...
- jdbc链接数据库的url两种写法
首先看下面两个jdbc的url 一:jdbc.url=jdbc:oracle:thin:@100.2.194.200:1521/abc二:jdbc.url=jdbc:oracle:thin:@100. ...
- 【待考察】Appium使用技巧,助你快速入门移动端自动化!
Appium使用技巧,助你快速入门移动端自动化! 原创: 柠檬班superman 柠檬班软件测试 1月4日 关注并置顶[柠檬班]的小哥哥小姐姐 “猪”年行大运 说说最近研究移动端的自动化 移动端的自动 ...
- 成为JavaGC专家—深入浅出Java垃圾回收机制
对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢? 首先可以满足作为一名软件工程师的求知欲, 其次,深入了解GC如何工作可以帮你写出更好的Java应用. 这仅仅代表我个人的意见,但我坚信 ...
- C++ #define #if #ifndef 宏指令
不会用就直接复制粘贴 #define CURSOR(top,bottom) (((top)<<8)|(bottom)) #define mul(x1,x2) (x1*x2) #define ...