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

当act.runOnUIThread当前不可见时,是否可以运行它?

当act.runOnUIThread当前不可见时,是不可以运行它的。

act.runOnUIThread是Android中的一个方法,用于在主线程中执行一段代码。它的作用是确保代码在主线程中执行,以避免在子线程中更新UI导致的异常。

然而,当当前界面不可见时,即Activity处于后台或已被销毁时,主线程可能已经被系统回收或者处于非活动状态,此时运行act.runOnUIThread是没有意义的。

因此,在开发中,我们需要在执行act.runOnUIThread之前,先判断当前界面的可见性,可以使用Activity的isFinishing()方法或者isDestroyed()方法来判断。只有当界面可见时,才可以安全地运行act.runOnUIThread。

总结:

当act.runOnUIThread当前不可见时,不可以运行它。在执行act.runOnUIThread之前,需要先判断当前界面的可见性,只有当界面可见时才可以安全地运行act.runOnUIThread。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

速读原著-Android应用开发入门教程(Android应用程序的概念性描述)

(4)后台(Background)进程 拥有一个当前用户看不到的 Activity(的 onStop()方法被调用),这些进程对用户体验没有直接的影响。...系统中通常有很多这样的进程在运行,因此要将这些进程保存在 LRU 列表中,以确保内存不足用户最近看到的进程最后一个被杀死。 (5)空(Empty)进程 包含任何处于活动状态的应用程序组件。...运行活动的情景:一个活动被启动,活动中的 onCreate()、onStart()和 onResume()这 3 个方法被依次调用,活动对应的界面出现在屏幕上。...在转入后台,onStop()是否被调用取决于活动是否被完全覆盖,在新的活动有透明部分时,转入后台的活动依然“可见”,其他情况下(较多数的情况)活动均进入不可见状态(被完全覆盖)。...服务的生命周期 服务可以长时间运行的特点是没有可视化界面,服务的生命周期如图 2 所示。 ?

97010

线程Thread相关知识点总结

0x03:创建并运行线程   调用start方法后,线程开始执行run方法中的代码。线程进入运行状态。可以通过Thread类的isAlive方法来判断线程是否处于运行状态。...线程处于运行状态,isAlive返回true,isAlive返回false,可能线程处于等待状态,也可能处于停止状态。...实际上,yield()方法对应了如下操作:先检测当前是否有相同优先级的线程处于同可运行状态,如有,则把 CPU 的占有权交给此线程,否则继续运行原来的线程。...因为一个线程执行一个对象的同步代码块,其他的线程仍然可以执行对象的非同步代码块。...一个线程开始执行同步代码块,并不意味着必须以不间断的方式运行,进入同步代码块的线程可以执行Thread.sleep()或者执行Thread.yield()方法,此时并不释放对象锁,只是把运行的机会让给其他的线程

63320

Document对象

document.mozFullScreenEnabled: 返回一个布尔值,表明浏览器是否支持全屏模式,全屏模式只在那些包含窗口化的插件的页面中可用,对于一个元素中的页面,则必需拥有...document.onunload: 窗口卸载其内容和资源触发。 document.onerror: 发生JavaScript运行时错误与资源加载失败触发。...document.onanimationcancel: CSS动画意外中止,即在任何时候停止运行而不发送animationend事件将发送此事件,例如animation-name被改变,动画被删除等...document.visibilityState: 只读属性,返回document的可见性,即当前可见元素的上下文环境,由此可以知道当前文档(即为页面)是在背后, 或是不可见的隐藏的标签页,或者正在预渲染...document.hasFocus(): 返回一个Boolean,表明当前文档或者当前文档内的节点是否获得了焦点,该方法可以用来判断当前文档中的活动元素是否获得了焦点。

1.5K10

思维导图整理Java并发基础

3.3、让出优先权 Thread 有一个静态 yield 方法,一个线程调用 yield 方法,实际就是在暗示线程调度器当前线程请求让出自己的CPU 使用,但是线程调度器可以无条件忽略这个暗示。...区别之一是最后一个非守护线程束, JVM会正常退出,而不管当前是否存在守护线程,也就是说守护线程是否结束并不影响 JVM退出。换而言之,只要有一个用户线程还没结束,正常情况下JVM就不会退出。...一个变量被声明为volatile,线程在写入变量不会把值缓存在寄存器或者其他地方,而是会把值刷新回主内存,其它线程读取该共享变量,会从主内存重新获取最新值,而不是使用当前线程的工作内存中的值。...12、Java 中的原子性操作 所谓原子性操作,是指执行一系列操作,这些操作要么全部执行,要么全部执行,不存在只执行其中一部分的情况。 例如在设计计数器一般都先读取当前值,然后+1,再更新。...14.4、可重入锁 一个线程要获取一个被其他线程持有的独占锁,该线程会被阻塞。 那么 一个线程再次获取它自己己经获取的锁是否会被阻塞呢?

43620

Java 并发包中的读写锁及其实现分析

前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一刻只允许一个线程进行访问,而读写锁在同一可以允许多个读线程访问,但是在写线程访问,所有的读线程和其他写线程均被阻塞...如果存在读锁,则写锁不能被获取,原因在于:读写锁要确保 写锁的操作对读锁可见,如果允许读锁在已被获取的情况下对写锁的获取,那么正在运行的其他读线程就无法感知到当前写线程的操作。...写锁的释放与ReentrantLock的释放过程基本类似,每次释放均减少写状态,写状态为0表示写锁已被释放,从而等待的读写线程能够继续访问读写锁,同时前次写线程的修改对后续读写线程可见。...接下来看一个锁降级的示例:因为数据不常变化,所以多个线程可以并发的进行数据处理,数据变更后,当前线程如果感知到数据变化,则进行数据的准备工作,同时其他处理线程被阻塞,直到当前线程完成数据的准备工作,示例代码如代码清单...主要原因是保证数据的可见性,如果当前线程获取读锁而是直接释放写锁,假设此刻另一个线程(记作 线程T)获取了写锁并修改了数据,则当前线程无法感知线程T的数据更新。

35820

16.Android-activity生命周期与启动模式

运行状态 如果一个活动位于屏幕的前台(可见的),那么它就是活动的或正在运行的。...仍然保留所有的状态和成员信息,但是,它对用户来说不再可见,所以的窗口是隐藏的,当在其他地方需要内存,会被系统杀死。...比如:APP在后台运行 销毁状态 activity被系统杀死或者调用finish方法主动退出 可以重写的方法有: onStart() : onCreate()之后,会调用该方法 onResume()...Manifest中配置如下: android:launchMode=”standard” //可以写,因为默认就是standard模式。...比如:我们在当前MainActivity中通过按钮重复打开第二个MainActivity,系统就会检测到当前栈顶正在运行的activity实例等于要打开的activity实例,就不会创建实例.

55910

干货:Java多线程详解(内附源码)

线程是程序执行的最小单元,多线程是指程序同一可以有多个执行单元运行(这个与你的CPU核心有关)。...加锁:可以保证同一间只有同一线程操作共享变量,当前线程操作共享变量,共享变量不会被别的线程修改,所以可见性、有序性和原子性问题都得到解决。...4.4 interrupt方法 中断线程,它会中断处于阻塞状态下的线程,但是对于运行状态下的线程起任何作用。...创建一个新线程,这个新线程的优先级等于创建线程的优先级,且只有当创建线程是守护线程,新线程才是守护线程。...因为同一间只有一个线程调用getAndDecrement方法,所以它在做num--操作,不用担心num变量会发生改变。所以原子性、可见性和有序性都可以得到保证。

1.3K51

线程周期、创建线程的方式、线程池

调用 execute() 方法添加一个请求任务,线程池会做如下判断:2.1 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务;2.2 如果正在运行的线程数量大于或等于...一个线程完成任务,它会从队列中取下一个任务来执行。...一个线程无事可做,超过一定的时间(keepAliveTime) ,线程池会判断:如果当前运行的线程数大于 corePoolSize,那么这个线程就被停掉。...专业说:因为这些方法在操作同步线程,都必须要标识它们操作线程的锁,只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。...,是否可见是不确定的.假如此时thread1 ready泄露了(leak through)了,那么Thread 2可以看见ready为true,但是有可能answer的改变并没有泄露,则thread2有可能会输出

87320

Android 中进程的级别以及 Service 的优先级

可见进程(Visible process):如果一个进程不含任何前台的组件,但仍可被用户在屏幕上看到。满足下面任意一条的时候,进程被认为是可见的。...后台进程直接影响用户体验,系统会为了前台进程、可见进程、服务进程而任意杀死后台进程,通常情况下会有很多后台进程存在,他们会被保存在一个 LRU(least recently used)列表中,这样就可以确保用户最近使用的...空进程:如果一个进程包含任何活跃的应用组件,则认为是空进程。例如:一个进程当中已经没有数据运行了,但是内存当中还为这个应用保留了一个进程空间。...在 Android 4.0 以前,不提供这个标志的话,会影响系统判定当前 Service 进程的重要性(会把认为是后台进程),要设置的时候,告诉系统进程重要性的唯一方式是,通过 bindService...BIND_ADJUST_WITH_ACTIVITY 如果从一个 Activity 绑定,则这个 Service 进程的优先级和 Activity 是否对用户可见有关。

1.6K21

Java 并发包中的读写锁及其实现分析

写状态增加1,等于S + 1,读状态增加1,等于S + (1 << 16),也就是S + 0×00010000。...如果存在读锁,则写锁不能被获取,原因在于:读写锁要确保 写锁的操作对读锁可见,如果允许读锁在已被获取的情况下对写锁的获取,那么正在运行的其他读线程就无法感知到当前写线程的操作。...写锁的释放与ReentrantLock的释放过程基本类似,每次释放均减少写状态,写状态为0表示写锁已被释放,从而等待的读写线程能够继续访问读写锁,同时前次写线程的修改对后续读写线程可见。...接下来看一个锁降级的示例:因为数据不常变化,所以多个线程可以并发的进行数据处理,数据变更后,当前线程如果感知到数据变化,则进行数据的准备工作,同时其他处理线程被阻塞,直到当前线程完成数据的准备工作,示例代码如代码清单...主要原因是保证数据的可见性,如果当前线程获取读锁而是直接释放写锁,假设此刻另一个线程(记作 线程T)获取了写锁并修改了数据,则当前线程无法感知线程T的数据更新。

71040

Milvus之WAL介绍

首先,用户命令的原子性没得到保证,比如在系统意外退出,用户某一次插入的数据可能部分落盘、部分丢失;其次,用户无法明确知道数据何时可见,即使在客户端等待1s也未必能保证之前插入数据全部可见;最后,当初设计时没有考虑数据删除...当用户调用 flush() ,该用户线程首先会拿到当前系统的位置①并被阻塞住,直到系统内位置③与其重合才被唤醒并返回。这样待 flush() 返回,其之前的所有操作都将可见。...而我们需要在阻塞用户线程的情况下,让 WAL 运行在一个限定大小的内存空间里。 Milvus 在这里使用了双缓冲区。...初始读写指针指向同一片数组;写指针写到数组尾部,会判断读指针是否和自己共享同一片缓冲,若是则新数据写往另一片缓冲,否则当前缓冲从头写起;而读指针在追赶写指针,发现读到缓冲尾部需判断另一片缓冲的内容是否当前内容的下一片...wal_path WAL 路径,默认值 Milvus 数据路径下的wal目录 用户可以使用默认路径。不过考虑到 WAL 有频繁的文件读写操作,如果硬件允许,用户可以指定在高速磁盘上。

72941

21.1 Java 多线程编程基础

RUNNABLE 运行操作系统调度线程可以运行或该线程正在运行。 BLOCKED 阻塞状态 因为它在等待获得一个锁,以便进入声明为 synchronized 的方法或代码块。...WAITING 线程中止运行,因为调用了 Object.wait() 或 Thread.join() 方法。 在 sleep 和 wait 。...join() 是一个对象方法,可以让调用 join 的当前线程一直处于等待状态,等待直到该线程结束。可以把这个方法理解为一个指令,在其他线程结束之前,当前线程不会继续向前运行。...可重入是通过记录锁的持有线程和持有数量来实现的,调用被 synchronized 保护的代码,检查对象是否已被锁,如果是,再检查是否当前线程锁定,如果是,增加持有数量,如果不是被当前线程锁定,才加入等待队列...,释放锁,减少持有数量,数量变为 0 才释放整个锁。

25820

Java并发编程:Java中的锁和线程同步机制

如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会消除身上的偏向锁,将锁恢复到标准的轻量级锁。 通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能。...,第二个线程加入锁争用的时候,偏向锁就会升级为轻量级锁;  轻量级锁的加锁过程: 在代码进入同步块的时候,如果同步对象锁状态为无锁状态(锁标志位为“01”状态,是否为偏向锁为“0”),虚拟机首先将在当前线程的栈帧中建立一个名为锁记录...如果这个更新操作失败了,虚拟机首先会检查对象的Mark Word是否指向当前线程的栈帧,如果是就说明当前线程已经拥有了这个对象的锁,那就可以直接进入同步块继续执行。...3.加锁机制(即同步机制)既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性,原因是声明为volatile的简单变量如果当前值与该变量以前的值相关,那么volatile关键字不起作用...sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定。好比如说,我要做的事情是"点火->烧水->煮面",而当我点完火之后我立即烧水,我要休息一段时间再烧。

80020

Solr学习笔记 - 关于近实时搜索

软提交的权衡之处在于,提供了更快的可见性,因为它不需要等待后台完成merge。...执行提交是否打开新的搜索器。如果为false,则提交将把最近的索引更改刷新到稳定存储,但不会打开新的搜索器以使这些更改可见。默认值为true。...通常在NRT应用程序中,hard commits配置为openSearcher=false,而soft commits配置为使文档对搜索可见发生提交,会启动各种后台任务,例如合并段。...hard commit还可以选择性地使文档在搜索中可见,但是建议在NRT搜索中这样做,因为它比soft commit的开销更大。...soft commit 更快,因为只使得索引更改可见,而fsync索引文件,启动一个新的段或启动一个新的事务日志。

4.5K10

并发编程——基础知识篇(一)

(例如:long的高32位由线程A赋值了,低32位由线程B赋值了) ---- 1.2> 可见性(Visibility) 可见性 是指一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改...Thread.yield()方法会使当前线程让出CPU。让出CPU并不表示当前线程执行了。当前线程在让出CPU后,还会进行CPU资源的争夺,但是是否能够再次被分配到,就不一定了。...一个Java应用内,只有守护线程,Java虚拟机就自然退出了。我们可以通过调用setDaemon(true)的方式,设置线程为守护线程。...轻量级锁的操作也很轻便,只是简单地将对象头部作为指针,指向持有锁的线程堆栈的内部,来判断一个线程是否持有对象锁。 如果线程获得轻量级锁成功,则可以顺利进入临界区。...Java虚拟机在JIT编译,通过对运行上下文的扫描,去除不可能存在共享资源竞争的锁。通过锁消除,可以节省毫无意义的请求锁时间。

47321

Android在多种设计下实现懒加载机制的方法

ViewPager 嵌套 Fragment 时会起作用 ,如果切换 ViewPager 则该方法也会被调用,参数 isVisibleToUser 为 true 代表当前 Fragment 对用户可见,否则不可见...所以最简单的思路: Fragment 可见才去加载数据,不可见就不让加载数据 。据我们创建抽象 BaseFragment ,对其进行封装。...首先我们引入 isVisibleToUser 变量,负责保存当前 Fragment 对用户的可见状态。...首先 setUserVisibleHint(boolean isVisibleToUser) 方法中是必须调用的,即 Fragment 由可见变为不可见和不可见变为可见回调。...但是这时候又会出现一个问题,如果一个APP里第一种,第二种情况并存的话,这段代码又不适合第一种情况了,因为对于第一种的情况判定 isVisibleToUser 为 false ,虽然走第一个处理逻辑

1.2K30

行情艰难,Android初中级面试题助你逆风翻盘,每题都有详细答案

Acitivty从不可见重新变为可见,OnRestart就会被调用; onStart():表示Activity正在被启动,此时Activity可见但不在前台,还处于后台,无法与用户交互; onResume...FLAG_ACTIVITY_SINGLE_TOP : 对应singleTop启动模式,其效果和在XML中指定该启动模式相同; FLAG_ACTIVITY_CLEAR_TOP : 具有此标记位的Activity,启动...设置Activity的android:configChanges,切屏会销毁当前Activity,然后重新加载调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次; onPause() →onStop...因此适用于那些数据相对静态的页,Fragment数量也比较少的那种; FragmentStatePagerAdapter只保留当前页面,页面不可见,该Fragment就会被消除,释放其资源。...参考回答:Service默认并不会运行在子线程中,也运行在一个独立的进程中,同样执行在主线程中(UI线程)。

73220

精选Android中高级高频面试题:四大组件及Fragment原理

Acitivty从不可见重新变为可见,OnRestart就会被调用; onStart():表示Activity正在被启动,此时Activity可见但不在前台,还处于后台,无法与用户交互; onResume...FLAG_ACTIVITY_SINGLE_TOP : 对应singleTop启动模式,其效果和在XML中指定该启动模式相同; FLAG_ACTIVITY_CLEAR_TOP : 具有此标记位的Activity,启动...参考回答: 设置Activity的android:configChanges,切屏会销毁当前Activity,然后重新加载调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次; onPause(...因此适用于那些数据相对静态的页,Fragment数量也比较少的那种; FragmentStatePagerAdapter只保留当前页面,页面不可见,该Fragment就会被消除,释放其资源。...参考回答: Service默认并不会运行在子线程中,也运行在一个独立的进程中,同样执行在主线程中(UI线程)。

1.7K00

Spring事务专题(三)事务的基本概念,Mysql事务处理原理

update一条记录记录一条对应相反的update记录。」...,基于效率的考虑,我们可以在每次给行记录加锁先给当前表加一个意向锁,如果我们要对行加读锁(S)的话,那么就先给表加一个意向读锁(IS),如果要对行加写锁(X)的话,那么先给表加一个意向写锁(IX),这样当我们需要给整个表加锁的时候就可以通过先判断表上是否已经存在了意向锁来决定是否可以上锁了...一个事务对某个表执行了增、删、改操作,那么InnoDB存储引擎就会给它分配一个独一无二的事务id,分配方式如下: 对于只读事务来说,只有在第一次对某个用户创建的「临时表执行增、删、改操作」才会为这个事务分配一个事务...为了解决这个问题,MySQL提出了一个ReadView(快照)的概念,「在Select操作前会为当前事务生成一个快照,然后根据快照中记录的信息来判断当前记录是否对事务是可见的,如果不可见那么沿着版本链继续往上找...❞ 生成快照后,会通过下面这个流程来判断该记录对当前事务是否可见 ? MVCC 从上图中我们可以看到,在根据当前数据库中运行中的读写事务id,会去生成一个ReadView。

39910

Activity 的 36 大难点,你会几个?「建议收藏」

API >12 ,需要加入 screenSize 属性,否则屏幕切换即使你设置了 orientation 系统也会重建 Activity !...Activity ,此标记位便体现了的效果。...之内( 1024KB ) 我们采用传递 Bitmap 的方法,发现图片大小超过 1024(准确地说是 1020 左右)的时候,程序就会出现闪退、停止运行等异常(不同的手机反应不同) 因此可以判断 Intent...一个进程满足下面任何一个条件都被认为是可视的: 寄宿着一个不是前台的活动,但是它对用户仍可见的 onPause() 方法已经被调用)。...5.6.2 用户行为 用户可以选择让程序继续运行,也可以让程序停止运行。 他们在使用你的应用程序时,并不希望每次都要处理这个对话框。

72120
领券