首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在android的oncreate方法中插入一个while循环

在Android的onCreate方法中插入一个while循环是一个不推荐的做法,因为这样会导致主线程被阻塞,造成界面卡顿甚至ANR(Application Not Responding)的错误。

在Android开发中,onCreate方法是Activity生命周期的一部分,用于初始化Activity的各种操作。在这个方法中,我们通常会进行一些UI的初始化、数据的加载以及注册监听器等操作。

如果在onCreate方法中插入一个while循环,会导致该循环一直执行,直到循环条件不满足或者出现异常才会退出。由于这个循环是在主线程中执行的,会导致主线程被长时间占用,无法响应用户的交互操作,从而造成界面卡顿或者无响应。

为了避免这种情况,我们应该将耗时的操作放在子线程中执行,可以使用线程、Handler、AsyncTask等方式来实现。这样可以保证主线程的流畅运行,提升用户体验。

如果确实需要在主线程中执行一些循环操作,可以考虑使用Handler的postDelayed方法来实现定时执行,或者使用Timer、ScheduledExecutorService等定时任务的方式来执行循环操作。

总结起来,不推荐在Android的onCreate方法中插入一个while循环,应该将耗时的操作放在子线程中执行,保证主线程的流畅运行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

看AspectJAndroid强势插入

那么AOP这种编程思想有什么用呢,一般来说,主要用于不想侵入原有代码场景,例如SDK需要无侵入宿主插入一些代码,做日志埋点、性能监控、动态权限控制、甚至是代码调试等等。...Android项目中使用AspectJ AOP用处非常广,从Spring到Android,各个地方都有使用,特别是在后端,Spring已经使用非常方便了,而且功能非常强大,但是Android...我们可以发现,onCreate最前面,插入了一行AspectJ代码。这个就是AspectJ主要功能,抛开AOP思想来说,我们想做,实际上就是『不侵入原有代码基础上,增加新代码』。...我们再来看下编译后代码: ? 我们可以看见,只有testAOP2()方法中被插入了代码,这就做到了精确条件插入。...我们可以看见com.xys.aspectjxdemo包下所有方法都被加上了try catch,同时,catch,被插入了我们切入代码,但是最后,他依然会throw e,也就是说,这个异常已经会被抛出去

2.5K50
  • shell编程 for while until循环使用方法及案例

    ————前言———— Shell脚本编程,有几种常见循环结构,包括for循环while循环和until循环,总的来说,循环Shell编程扮演着至关重要角色,它们使得自动化任务变得更加容易,提高了效率...1.for循环 for循环允许你对一组元素(如数组元素、文件行、命令输出等)进行迭代。...就是利用for循环来自动删除上边创建用户 常用做法 人力部门给你发来一个名单现如今需要 创建对应用户 如果名单有300个名字该如何创建呢 该不会是人力部门报名完毕 之后跑到运维部来一个个创建用户吧...while循环循环开始之前,根据条件真假来决定是否执行循环体。 循环次数不一定是固定,而是在运行时根据条件确定。...until循环循环开始之前,根据条件真假来决定是否执行循环体,与while循环相反,它在条件为假时执行循环体,直到条件为真。 循环次数同样不一定是固定,而是在运行时根据条件确定

    35510

    Activity onCreate() 方法为什么获取 View 宽和高为0?

    Activity onCreate() 方法为什么获取 View 宽和高为0 ?...: width=0 | height=0 如上面代码结果所示,ActivityonCreate()方法我们尝试获取控件宽和高,却获取得是0,这是因为 View 绘制和 Activity 生命周期方法并不同步...: 方法一、 Activity onWindowFocusChanged() 方法获取 View 尺寸。...,例如可以使用延时或者onCreate()方法手动调用 View 测量方法,相对而言以上几种方法更为方便。...---- 最后想说是,本系列文章为博主对Android知识进行再次梳理,查缺补漏学习过程,一方面是对自己遗忘东西加以复习重新掌握,另一方面相信重新学习过程定会有巨大新收获,如果你也有跟我同样想法

    1.2K30

    解决onCreate()过程获取Viewwidth和Height为0方法

    最近在看Android底层代码view绘制原理时候讲到一个很有意思事情,也是我几年前刚开始学习Android开发时候比较纳闷一个问题,如果你不理解Android底层绘制,请看我之前一片文章对...那么onCreate()获取viewwidth和height会得到0呢,原因是Androidoncreate和onMesure是不同步,我们onCreate里面获取width和height,...针对上面的问题,网上提供了4种解决方案: 1,View.post() 此方法思路是onCreate里面执行一个线程,知道获取View宽高属性。...一般来说OnGlobalLayoutListener就是可以让我们获得到viewwidth和height地方 但是注意这个方法每次有些viewLayout发生变化时候被调用(比如某个View...4,重写ViewonLayout方法 我们知道Androidview绘制流程是onMesure->onLayout()顺序,所以onLayout获取也是真实数据。

    1.2K80

    从精准化测试看ASMAndroid强势插入-总纲

    技术选型 服务端开发,通常使用「单测+覆盖率」方式来保证代码执行覆盖程度,所以,这里借助代码覆盖率,来作为关联代码和用例桥梁。 ❝日企单测跑覆盖率,大于95%才算合格单测。...❞ 移动端,代码覆盖率通常使用JaCoCo,即 Java Code Coverage来实现。 实际开发过程,一般不太会对全量代码做检测,所以,需要改造JaCoco,提供增量探针功能。...测试用例库查找相应代码映射关系 获取推荐测试用例集 一个测试用例执行,代码层面上来看,实际上就是一系列函数调用链。执行测试用例时候,函数调用链上记录下对应关系即可。...,后续会根据纲要技术知识点,一步步完成整个体系建设。...向大家推荐下我网站 https://xuyisheng.top/ 点击原文一键直达 专注 Android-Kotlin-Flutter 欢迎大家访问

    1.2K30

    Android系统源码预置APK方法

    (注意下文中Test就是我们要预置到源码googleplay.apk名字!!...网上下载Google Play Store 4.6.17.apk,名字中含有空格,将空格去掉或者自直接将它重新命名) 1. packages/apps 下面以需要预置 APK 名字创建文件夹,以预制一个名为...TestAPK为例 2.将 Test.apk 放到 packages/apps/Test 下面 3. packages/apps/Test 下面创建文件 Android.mk,文件内容如下 : LOCAL_PATH...源码根目录下执行 …..Android # mmm packages/apps/Test 编译完成之后,就可以out/target/product/generic/system/app目录下看到Test.apk...android源码根目录下执行如下命令: USER-NAME@MACHINE-NAME:~/Android$ make snod 完成后就可以烧到板子上!!!!

    4.1K10

    从精准化测试看ASMAndroid强势插入-字节码

    每个Class文件都以8位为单位字节流组成,下面是一个Class文件中所包括内容,Class文件,各项内容按照严格顺序连续存放,Java虚拟机只要按照协议顺序来读取即可。...,常量池本质上就是一个数组存储了类中出现所有数值、字符串和类型常量,这些常量仅需要在这个常量池部分定义一次,就可以利用其索引,类文件所有其他各部分进行引用 字节码执行过程 字节码Java虚拟机是以堆栈方式进行运算...,类似CPU寄存器,Java虚拟机,它使用堆栈来完成运算,例如实现「a+b」加法操作,Java虚拟机,首先会将「a」push到堆栈,然后再将「b」push到堆栈,最后执行「ADD」指令...类型描述符 我们Java代码类型,字节码,有相应表示协议。...Java一个方法执行时候,Java虚拟机都会为其分配一个「栈帧」,栈帧是用来存储方法中计算所需要所有数据。 其中第0个元素就是「this」,如果方法有参数传入会排在它后面。

    68871

    从精准化测试看ASMAndroid强势插入-读懂diff

    我们计算增量代码覆盖率基础,就是要找出两个版本代码差异,Git环境下,我们可以很方便通过Git脚本来获取这些数据。...对于版本A,它符号是一个减号(「-」);而对于版本B ,它会使用一个加号(「+」)。 图中第三四行,就是被标记两个文件,针对这个标记,存在下面几种情况。...= @@)' 借助这样一个正则表达式和grep,就可以从diff信息找出修改文件和行号,执行如下: app/src/main/java/com/yw/qdcoverage/MainActivity.kt...探针插入,提供了Diff信息,从而可以实现增量探针机制。...向大家推荐下我网站 https://xuyisheng.top/ 点击原文一键直达 专注 Android-Kotlin-Flutter 欢迎大家访问

    77140

    从精准化测试看ASMAndroid强势插入-Plugin调试

    Gradle作为一个脚本工具,开发过程,最痛苦莫过于「调试」,大部分时候,我们都是通过Log方式来进行调试,在编译过程,可以很清楚看见执行过程,同时也能看到系统其它执行Task。...,它和Android原生Log类似,也有debug、info、error等日志级别,大家可以根据自己需求来调用。...断点调试 Gradle插件断点调试不能像普通代码那样调试,需要借助Android StudioRemote调试功能。...首先,需要在Android Studio创建一个Remote调试器,在运行标签上点击「Edit Configuration」,再点击「+」新增一个调试类型,选择Remote,将其命名为「plugin_debug...向大家推荐下我网站 https://xuyisheng.top/ 点击原文一键直达 专注 Android-Kotlin-Flutter 欢迎大家访问

    99250

    从精准化测试看ASMAndroid强势插入-Gradle插件

    hl=zh-cn#new_configurations Gradle Plugin有三种存在形式: 构建脚本:直接写在项目当前build.gradle buildSrc:项目根目录下buildSrc...文件夹,是一个系统保留目录,可以直接运行插件代码而不用引用插件包 独立项目:类似module,单独编译成jar使用 创建 Gradle自带了创建模板项目的方法——gradle init,通过这个指令,...Gradle插件,插件入口就是implementationClass申明类,implements Plugin并实现apply方法即可。...官方有很多任务,也是基于Transform实现,自定义Gradle Plugin,配合Transform做代码修改,是对编译过程进行干预一般方法一个最简单Transform如下所示。...这个目录实际上就是下一个Transform输入目录。复制中间产物过程,就是我们对产物进行修改时机。

    1K40

    从精准化测试看ASMAndroid强势插入-JaCoco初探

    初探 官网镇楼 https://www.eclemma.org/jacoco/ 从官网上就能看出这是一个极具历史感项目。最后生成覆盖率文件,是 源代码基础上,用颜色标记不同执行状态。...JaCoco插桩原理 JaCocoAndroid上只能使用Offline mode,它实现机制其实很简单,我们反编译一下它插入代码。...JaCoco对代码修改主要体现在下面几个地方: Class增加 属性和 jacocoInit方法 Method增加了$jacocoInit数字并初始化 增加了对数组修改 当然,这只是JaCoco...性能影响 由于JaCoco只是插入一个探针数组,所以对代码执行性能开销影响不大,但是由于插入大量探针代码,所以代码体积会增大不少,一般情况下,Android会在测试包插入,而在正式包中去除插入逻辑...从精准化测试看ASMAndroid强势插入-字节码 从精准化测试看ASMAndroid强势插入-Plugin调试 本文原创公众号:群英传,授权转载请联系微信(Tomcat_xu),授权后

    3.1K30

    Word插入一个可以勾选和取消方框

    文章背景: 在工作,有时需要在表格内插入几个复选框,让用户去勾选,如下图所示。这种通过点击方框,自动打上对勾效果如何实现呢?下面介绍一种方法。...操作步骤如下: (1)Word开发工具菜单栏,选择带勾号复选框,插入到word。 此时复选框既可以勾选,也可以取消勾选,但是勾选后是叉号(×),不是我们要勾号(√)。...这样,点击复选框后,就是我们想要勾号。 延伸阅读: 如果不使用控件箱带勾号复选框,如何在Word插入一个带勾号方框呢?下面介绍两种方法。...(2) 字母R转为勾号 把光标定位于需要插入勾选框位置,输入大写字母R。选中字母R,鼠标右键,菜单栏中选择需要字体Wingdings 2。点击确定,这时,R就变成了我们需要打钩样式了。...(□)打钩(√)5种方法(https://zhuanlan.zhihu.com/p/94069754)

    2.7K40

    实现杂记(27):解决onCreate()过程获取Viewwidth和Height为04种方法

    来确定别的view布局,但是onCreate()获取viewwidth和height会得到0.view.getWidth()和view.getHeight()为0根本原因是控件还没有完成绘制,你必须等待系统将绘制完...一般来讲Activity.onCreate(...)、onResume()方法中都没有办法获取到View实际宽高。...setContentView()被调用后,事件队列中会包含一个要求重新layoutmessage,所以任何你post到队列东西都会在Layout发生变化后执行。...2、语法很简单 3、重写ViewonLayout方法 这个方法某些场景实用,比如当你所要执行东西应该作为他内在逻辑被内聚、模块化view,否者这个解决方案就显得十分冗长和笨重。...onLayout方法会调用很多次,所以要考虑好在这个方法要做什么,或者第一次执行后禁用掉你代码。

    1.5K20

    工厂方法模式及Android源码应用

    ,此时,需要在工厂方法参数列表传入一个 Class 类来决定是哪一个产品类: public abstract class Factory { /** * @param clz 产品对象类类型...如果不喜欢这一种,也可以尝试为每一个产品都定义一个具体工厂,各司其职,像拥有多个工厂方式我们称为多工厂方法模式,同样当我们工厂类只有一个时候,我们还可以简化掉抽象类,只需要将对应工厂方法给为静态方法即可...其实Android对工厂方法模式应用更多,先看如下代码: public class AActivity extends Activity{ @Override protected void...(new LinearLayout(this)); } } 实际上,onCreate方法就相当于一个工厂方法,因为LinearLayout是一个ViewGroup,而ViewGroup又继承于View...AActivityonCreate方法构造一个View对象,并设置为当前ContentView返回给framework处理,如果现在又有一个BActivity,这时又在onCreate方法通过

    47810
    领券