Android ViewStub延迟初始化加载布局View,Kotlin

server/2025/2/26 14:21:32/

Android ViewStub延迟初始化加载布局View,Kotlin

activity_my.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="hello" /><ViewStubandroid:id="@+id/my_view_stub"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout="@layout/my_long_time_view" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="world" />
</LinearLayout>


import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.ViewStub
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContextclass MyActivity : AppCompatActivity() {companion object {const val TAG = "fly/MyActivity"}private var mViewStub: ViewStub? = nullprivate var mMyLongTimeView: MyLongTimeView? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d(TAG, "setContentView开始...")setContentView(R.layout.activity_my)Log.d(TAG, "setContentView结束")mViewStub = findViewById(R.id.my_view_stub)lifecycleScope.launch(Dispatchers.IO) {delay(2000)withContext(Dispatchers.Main) {showViewStub()}delay(2000)withContext(Dispatchers.Main) {hideViewStub()}}}private fun showViewStub() {val t = System.currentTimeMillis()Log.d(TAG, "ViewStub inflate")val inflatedView = mViewStub?.inflate()//mViewStub?.visibility = View.INVISIBLELog.d(TAG, "inflatedView 耗时=${System.currentTimeMillis() - t}")mMyLongTimeView = inflatedView?.findViewById(R.id.my_longt_time_view)!!mMyLongTimeView?.setImageResource(R.mipmap.image)}private fun hideViewStub() {mViewStub?.visibility = View.INVISIBLE}
}

import android.content.Context
import android.util.AttributeSet
import android.util.Log
import androidx.appcompat.widget.AppCompatImageViewclass MyLongTimeView : AppCompatImageView {companion object {const val TAG = "fly/MyLongTimeView"}constructor(ctx: Context, attribute: AttributeSet) : super(ctx, attribute) {Log.d(TAG, "开始耗时...")Thread.sleep(5000)Log.d(TAG, "耗时结束")}
}

my_long_time_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.MyLongTimeViewandroid:id="@+id/my_longt_time_view"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="centerCrop" />
</LinearLayout>

启动后就可以看到TextView的hello,world显示出来,随后显示图片,再随后隐藏图片。

Android GPU渲染屏幕绘制显示基础概念(1)-CSDN博客文章浏览阅读2.3k次,点赞33次,收藏30次。CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。而对SF来说,只要有合成任务,它就得再去申请VSYNC-sf。_android gpu渲染 https://blog.csdn.net/zhangphil/article/details/138585120


http://www.ppmy.cn/server/170766.html

相关文章

【Python项目】基于Python的Web漏洞挖掘系统

【Python项目】基于Python的Web漏洞挖掘系统 技术简介&#xff1a; 采用Python技术、MySQL数据库、Django框架、Scrapy爬虫等技术实现。 系统简介&#xff1a; Web漏洞挖掘系统是一个基于B/S架构的漏洞扫描平台&#xff0c;旨在通过自动化的方式对网站进行漏洞检测。系统主要功…

基于python+django的家教预约网站-家教信息管理系统源代码+运行步骤

该系统是基于pythondjango开发的家教预约网站。是给师妹做的课程作业。大家在学习过程中&#xff0c;遇到问题可以在github给作者留言。加油 效果演示 前台地址&#xff1a; http://jiajiao.gitapp.cn 后台地址&#xff1a; http://jiajiao.gitapp.cn/admin 后台管理帐号&am…

跟着李沐老师学习深度学习(十六)

继续学习深度学习&#xff08;十六&#xff09; 继续理解transformer 对于transformer的理解感觉还是云里雾里的&#xff0c;今天又找了一些视频进行一个梳理。 一个浅解 在B站学习发现评论区真的很不错&#xff0c;在沐神讲transformer论文的评论下&#xff0c;有一个评论…

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来

Kronecker分解&#xff08;K-FAC&#xff09;&#xff1a;让自然梯度在深度学习中飞起来 在深度学习的优化中&#xff0c;自然梯度下降&#xff08;Natural Gradient Descent&#xff09;是一个强大的工具&#xff0c;它利用Fisher信息矩阵&#xff08;FIM&#xff09;调整梯度…

《2025国内免费DeepSeek-R1自部署平台实测指南:三大运营商/腾讯/华为哪家强?附避坑清单》

更新日期&#xff1a;2025年2月24日 | 实测时效性声明&#xff1a;部分服务可能因政策调整限流或下线&#xff0c;建议结合最新信息参考。 一、前言&#xff1a;为什么关注DeepSeek-R1自部署&#xff1f; DeepSeek-R1-671B作为国内首个千亿级开源模型&#xff0c;其“满血版”…

ResNet 改进:添加LSKBlock动态调整其大空间感受场

目录 1. LSKBlock模块 2. 改进位置 3. 完整代码 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. LSKBlock模块 LSKBlock模块是一种用于深度学习模型的模块,尤其在计算机视觉任务中表现出色。它结合了局部特征、语义特征和全局特征,以…

Rk3568驱动开发_完善字符驱动_4

1.代码 驱动代码&#xff1a; #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/slab.h> #include <linux/uaccess.h> #include <linux/io.h>#define CHREDE…

反向代理模块kfj

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…