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

Android 双击退出程序但活动不结束功能!

本片博客将详细介绍: Android 活动中  onKeyDown()   onKeyUp()   onBackPressed()  三个方法的关系及使用 最后给出实现双击退回桌面的源码实例 ----...大家经常能接到一个需求 app 退到主界面之后,点击一下 home 键弹出提示:”再点一下退出程序“,要实现这个功能,首先就要先搞懂这三个方法之间的调用关系。...双击退回桌面但活动仅退到后台的实现 很明显,要实现这个功能,首先要重写这几个方法,这时我们先注意下文档,我们看到:无论是 onKeyDown onKeyUp 都有类似这么一句话 重点:如果我们仅仅希望使用我们自己的代码,不希望再去执行系统代码...,就返回 true ,如果执行完我们自己的代码后,依然打执行系统代码,就返回 false,我们当然不希望在执行系统代码,是的活动又被 finish() 调,所以我们这里返回 true。...return true; } else { Intent intent = new Intent(Intent.ACTION_MAIN);// 退到后台而不结束

69120

Android电源管理基础知识整理

前言 待机、睡眠与休眠的区别? Android开发者官网当中提到“idle states”,该如何理解,这个状态会对设备及我们的程序造成何种影响?...ACPI State Description S0 正常工作状态 S1 CPU与RAM供电正常,但CPU不执行指令 S2 比S1更深的一个睡眠层次,这种模式通常不采用 S3 挂起到内存 S4 挂起到硬盘...该模式下CPU并未断电,依旧可以接收处理某些特定事件,视具体设备而定,恢复至正常工作状态的速度也比STR更快,但也更为耗电。举个例子来说,以该方式进入睡眠时,后续通过点击键盘也能将系统唤醒。...看到这儿,不知你是否疑问,既然系统睡眠了,CPU断电不执行指令了,为何我们定的Alarm会生效以及能接收到来电?...Android在硬件架构上将处理器分为AP与BP,应用程序运行与AP之中,睡眠只是将AP断电,BP(Modem)不会断电,当有来电时,BP将会唤醒AP。

5.5K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Handler与Looper原理浅析

    本文分析下Android的消息处理机制,主要是针对Handler、Looper、MessageQueue组成的异步消息处理模型,先主观想一下这个模型需要的材料: 消息队列:通过Handler发送的消息并是即刻执行的...,是不应该唤醒的,异步消息的处理会更加特殊一些,先不讨论。...--关键点1 是否需要阻塞等待,第一次一定不阻塞--> nativePollOnce(ptr, nextPollTimeoutMillis); 睡眠等待,直到头部第一个消息Delay时间结束,所以next函数一定会返回一个Message对象。...Looper Java层与native层关系4.3.jpg 小结 loop线程睡眠的原理 :在MessageQueue中找到下一个需要执行的消息,没有消息的话,需要无限睡眠等待其他线程插入消息唤醒,如果有消息

    1.1K40

    Scheduling for the Android display pipeline

    Android用户几乎每时每刻都在和显示交互;因此,良好的显示性能对于用户体验至关重要。然而,实现平滑如丝的性能并不总是那么容易。需要整个系统协同工作,并且内核并不总是像人们所希望的那样支持这种协作。...当用户应用程序的用户界面线程从DispSync接收到 VSYNC信号时,它将从epoll()睡眠中唤醒,并执行以下操作: 处理输入事件。 执行由应用程序开发人员定义的Animation回调。...将更新的RenderNode树传递到另一个称为RenderThread的应用程序线程。 执行其他一些操作,例如清理和监视,然后在epoll()中返回睡眠状态,等待下一个VSYNC。...使输出缓冲区入队,而无需等待GPU完成。它包括一个硬件围栏,GPU通过该围栏通知SurfaceFlinger光栅化帧的渲染已完成。 执行其他关闭操作,然后返回睡眠状态,等待来自UI线程的下一个请求。...将SCHED_DEADLINE应用于应用程序任务的另一个问题是这些任务会自动挂起。例如,RenderThread可能会阻止等待输出缓冲区从BufferQueue出队的等待。

    89010

    【Android】Service介绍和生命周期

    ="string"> 说明: 字段 说明 android:exported 表示是否允许除了当前程序之外的其他程序访问这个服务 android:enabled 表示是否启用这个服务...与Service Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了Service这个概念,那么这里面要强调的是Service不是独立的进程...,也不是独立的线程,它是依赖于应用程序的主线程的,也就是说,在更多时候不建议在Service中编写耗时的逻辑和操作,否则会引起ANR。...IntentService有以下特点: 1.它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents。...2.创建了一个工作队列,来逐个发送intent给onHandleIntent()。 3.不需要主动调用stopSelft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。

    31710

    【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )

    文章目录 一、ARM 处理器工作模式 二、ARM 架构模型 一、ARM 处理器工作模式 ---- 参考 【嵌入式开发】ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存器...CPSR SPSR | 模式设置代码编写 | 设置 svc 模式 ) 博客 , ARM 处理器有 7 种工作模式 ; ARM 处理器的 七种 工作模式 : 1.User ( 用户模式 usr )...架构模型 ---- ARM 架构中寄存器数量很多 , 有 16 个 ; 另外多了 标志寄存器 CPSR , 程序状态寄存器 SPSR ; 程序状态寄存器 SPSR 在中断模式下使用 ; R0 ~...是所有模式通用的寄存器 ; 上述 7 种模式下 , 寄存器的的个数与种类都是不同的 ; 每个模式对应的寄存器参考 : 如果不做嵌入式开发 , 用户模式 和 系统模式 是主要需要学习的模式 , Android...逆向中 , 主要涉及这两个模式 ; R13 ( SP ) 是堆栈指针寄存器 ; R14 ( LR ) 是返回地址寄存器 ; R15 ( PC ) 是指令寄存器 , 指向下一条要执行的指令 ; Android

    1.8K10

    Android系统层Watchdog机制源码分析

    在很早以前那个单片机刚发展的时候, 单片机容易受到外界工作影响, 导致自己的程序跑飞, 因此有了看门狗的保护机制, 即:需要每多少时间内都去喂狗, 如果不喂狗, 看门狗将触发重启....而手机, 其实是一个超强超强的单片机, 其运行速度比单片机快N倍, 存储空间比单片机大N倍, 里面运行了若干个线程, 各种软硬件协同工作, 不怕一万,就怕万一, 万一我们的系统死锁了, 万一我们的手机也受到很大的干扰程序跑飞了...注:本文以Android6.0代码讲解 Android系统的Watchdog源码路径在此: frameworks/base/services/core/java/com/android/server/Watchdog.java...,会post一下自己,同时将mComplete置为false,标明已经发出一个消息正在等待处理。...30秒,使用uptimeMills是为了不把手机睡眠时间算进入,手机睡眠时系统服务同样睡眠 367 while (timeout > 0) { 368

    1.5K70

    Android性能优化典范(1)

    每一条柱状线都包含三部分,蓝色代表测量绘制Display List的时间,红色代表OpenGL渲染Display List所需要的时间,黄色代表CPU等待GPU处理的时间。 4)Why 60fps?...有下面一些措施能够显著减少电量的消耗: 我们应该尽量减少唤醒屏幕的次数与持续的时间,使用WakeLock来处理唤醒的问题,能够正确执行唤醒操作并根据设定及时关闭操作进入睡眠状态。...但是即使在这种睡眠状态下,大多数应用还是会尝试进行工作,他们将不断的唤醒手机。一个最简单的唤醒手机的方法是使用PowerManager.WakeLock的API来保持CPU工作并防止屏幕变暗关闭。...这使得手机可以被唤醒,执行工作,然后回到睡眠状态。知道如何获取WakeLock是简单的,可是及时释放WakeLock也是非常重要的,不恰当的使用WakeLock会导致严重错误。...例如,如果有另外一个程序需要比你设定的时间晚5分钟唤醒,最好能够等到那个时候,两个任务捆绑一起同时进行,这就是非精确定时器的核心工作原理。

    63420

    Android 性能优化典范

    [1240] 每一条柱状线都包含三部分,蓝色代表测量绘制Display List的时间,红色代表OpenGL渲染Display List所需要的时间,黄色代表CPU等待GPU处理的时间。...有下面一些措施能够显著减少电量的消耗: 我们应该尽量减少唤醒屏幕的次数与持续的时间,使用WakeLock来处理唤醒的问题,能够正确执行唤醒操作并根据设定及时关闭操作进入睡眠状态。...但是即使在这种睡眠状态下,大多数应 用还是会尝试进行工作,他们将不断的唤醒手机。一个最简单的唤醒手机的方法是使用PowerManager.WakeLock的API来保持CPU工作并 防止屏幕变暗关闭。...这使得手机可以被唤醒,执行工作,然后回到睡眠状态。知道如何获取WakeLock是简单的,可是及时释放WakeLock也是非常重 要的,不恰当的使用WakeLock会导致严重错误。...例如,如果有 另外一个程序需要比你设定的时间晚5分钟唤醒,最好能够等到那个时候,两个任务捆绑一起同时进行,这就是非精确定时器的核心工作原理。

    1K10

    Android中的睡与不睡

    1 我们的处理器 那么实际上,在一般正常的情况下,系统在屏幕关闭后,就会开始Suspend所有进程,准备进入睡眠,这个过程根据手机的不同而不同,一般在10s左右即会进入正常的睡眠。...而BP则是另一个经常不为人知的处理器,他用于运行实时操作系统,手机最基本的通信协议栈就运行在BP的实时操作系统上,BP的功耗非常低,基本不会进入睡眠。...2 他们的协作 当手机正常进入睡眠后,AP就会被睡眠,而只有BP在工作,这也是基于降低功耗的考虑。那么睡眠后,我们是如何收到消息的呢?...前面说了,整个通信协议栈是运行在BP上的,那么当有消息数据包到达时,BP就会唤醒AP,进行相应的处理。 同时,Android API还提供了WakeLock机制,那么为什么要设计这个机制呢?...前面说了,一旦用户按电源键进行睡眠,AP中的所有进程都讲被Suspend掉,那么某些程序的关键代码,就有可能不能被执行,所以,Android提供了WakeLock来让开发者在睡眠模式下也能阻止AP进入睡眠

    1K20

    Android Handler机制3之SystemClock类

    当系统进入深度睡眠(CPU关闭,屏幕显示器不显示,设备等待外部输入)时,或者空闲或其他省电机制的影响,此时时钟停止,但是该时钟不会被时钟调整。...该时钟是被保证为单调的,并且适用当间隔不跨越设备睡眠时间间隔定时。大多数方法接受时间戳的值就像uptimeMillis()方法。...所以Handler使用uptimeMillis()方法获取一个时钟,并且需要调用android.os.Looper来进行事件循环)(通常存在于任何GUI应用程序中)。...即使设备或者应用程序处于深度休眠或者未运行, android.app.AlarmManage仍然可以发出一次或者重复事件。...上面提到了一个概念"关于Android的深度睡眠",这里就简单介绍下: 1、Android的深度睡眠 所以Android的深度睡眠,即屏幕关闭后,一段时间不做任何操作,不连接USB,然后在一定的时间后

    1.5K20

    为什么WindowsiOS操作很流畅而LinuxAndroid却很卡顿呢

    处理重要但是不紧急事件的进程,保持固有优先级分配长时间片就绪等待。 处理不重要但紧急事件的进程,提升优先级但不分配长时间片,处理完毕立即返回固有优先级。...Windows,MacOS/iOS这种Desktop系统的GUI进程,很多时候都是在等待人的进一步操作而睡眠,要么在等鼠标,要么在等键盘,要么在等声卡,显卡的输出,或者就是在将用户输入的信息往磁盘里写而等待...Linux内核仅仅跟踪一个睡眠时间而且还是平均的睡眠时间,是区别不出进程当前的紧急性和重要性的。没有外界的信息输入,仅靠启发预测,当前的AI算法貌似还没有到这个境界吧。换句话说,启发算法是不准确的。...最后说说iOS和Android吧,题外话,不涉及技术。 Android就是卡,不接受反驳。 再贵的Android机器也卡,三星的,华为的照卡不误,只是相比别的稍微好一点点而已。这意味着它们成不了街机。...因为手机是买来用的,不是买来debug的,除了程序员没人在乎Android机慢的原因,即便是程序员也很少有折腾明白的,只是因为这份职业让他不用Android就不正确。

    2K30

    Linux 面试最高频的 5 个基本问题

    举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛! 如果同时执行这样的程序两个呢?...CPU的使用率还是100%,但是工作负载则变成2了。 所以也就是说,CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换。...如果单核CPU的话,负载达到1就代表CPU已经达到满负荷的状态了,超过1,后面的进行就需要排队等待处理了。...如果是是多核多CPU,假设现在服务器是2个CPU,每个CPU有2个核,那么总负载不超过4都没什么问题。...S (TASK_INTERRUPTIBLE):可中断的睡眠状态,处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。

    86310

    如何用 Android vitals 解决应用程序的质量问题

    为了延长电池的续航时间,屏幕关闭后,Android 设备将通过禁用主 CPU 内核进入深度睡眠模式。除非用户唤醒设备,否则设备会尽可能长时间地保持在此状态。...这些是比 AlarmManager 更高级别的 API,而且为更智能的定期任务提供以下好处: A) 批处理 —— 许多任务将被批量处理以使设备睡眠时间更长,而不是多次唤醒系统来执行这些任务。...界面保持冻结几秒钟后,会显示一个对话框,让用户选择等待或强制应用程序退出。 从应用程序开发的角度来看,当应用程序因为执行耗时操作(如磁盘或网络读写)阻塞主线程时,就会发生 ANR。...因此,将任何可能延迟其工作的操作都转移到后台线程是至关重要的。 Android vitals 如何显示 ANR?...如果他们的设备受到来自其他应用程序同时读取和写入的巨大压力,而你的应用程序在队列中等待执行“快速”读取操作时又该怎么办?切勿在主线程上执行读写操作。 在主线程上执行长时间计算。

    2.3K10

    Android M 特性 Doze and App Standby模式详解

    Understanding Doze 1.设备进入Doze睡眠模式时机: 用户不操作设备一段时间 屏幕关闭 设备未连接电源充电 2.Doze模式下应用程序有什么变化: 系统试图通过限制应用程序访问网络和...CPU密集型服务节省电池; 防止应用程序访问网络,推延应用程序的工作,同步,和标准的警报; 系统定期提供一个短暂的时间让应用程序完成延迟的工作活动,在这个时间片里,系统将提供维持性窗口应用程序访问网络,...运行在等待的同步,工作,和报警等活动。...IDLE_MAINTENANCE:处理挂起任务 如下图所示,Doze期间提供间隔一小段时间(30s)供应用程序使用网络和处理挂起的活动。...Understanding App Standby 当用户不触摸使用应用程序一段时间时,该应用程序处于App Standby状态,系统将把该App标志为空闲状态。

    7.3K11

    为什么WindowsiOS操作很流畅而LinuxAndroid却很卡顿呢

    2、处理重要但是不紧急事件的进程,保持固有优先级分配长时间片就绪等待。 3、处理不重要但紧急事件的进程,提升优先级但不分配长时间片,处理完毕立即返回固有优先级。...Windows,MacOS/iOS这种Desktop系统的GUI进程,很多时候都是在等待人的进一步操作而睡眠,要么在等鼠标,要么在等键盘,要么在等声卡,显卡的输出,或者就是在将用户输入的信息往磁盘里写而等待...Linux内核仅仅跟踪一个睡眠时间而且还是平均的睡眠时间,是区别不出进程当前的紧急性和重要性的。没有外界的信息输入,仅靠启发预测,当前的AI算法貌似还没有到这个境界吧。换句话说,启发算法是不准确的。...最后说说iOS和Android吧,题外话,不涉及技术。 Android就是卡,不接受反驳。 再贵的Android机器也卡,三星的,华为的照卡不误,只是相比别的稍微好一点点而已。这意味着它们成不了街机。...因为手机是买来用的,不是买来debug的,除了程序员没人在乎Android机慢的原因,即便是程序员也很少有折腾明白的,只是因为这份职业让他不用Android就不正确。

    90410

    为什么WindowsiOS操作很流畅而LinuxAndroid却很卡顿呢

    2、处理重要但是不紧急事件的进程,保持固有优先级分配长时间片就绪等待。 3、处理不重要但紧急事件的进程,提升优先级但不分配长时间片,处理完毕立即返回固有优先级。...Windows,MacOS/iOS这种Desktop系统的GUI进程,很多时候都是在等待人的进一步操作而睡眠,要么在等鼠标,要么在等键盘,要么在等声卡,显卡的输出,或者就是在将用户输入的信息往磁盘里写而等待...Linux内核仅仅跟踪一个睡眠时间而且还是平均的睡眠时间,是区别不出进程当前的紧急性和重要性的。没有外界的信息输入,仅靠启发预测,当前的AI算法貌似还没有到这个境界吧。换句话说,启发算法是不准确的。...最后说说iOS和Android吧,题外话,不涉及技术。 Android就是卡,不接受反驳。 再贵的Android机器也卡,三星的,华为的照卡不误,只是相比别的稍微好一点点而已。这意味着它们成不了街机。...因为手机是买来用的,不是买来debug的,除了程序员没人在乎Android机慢的原因,即便是程序员也很少有折腾明白的,只是因为这份职业让他不用Android就不正确。

    1.3K30

    Android Zero day CVE-2019-2215安全漏洞

    NSO集团发言人说:“ NSO不会出售,也绝不会出售漏洞利用程序或漏洞。”“这一漏洞与NSO无关;我们的工作重点是开发旨在帮助获得许可的情报和执法机构挽救生命的产品。”...Android 发言人说,要利用该漏洞需要比较苛刻的条件,需要安装恶意程序,才能利用该漏洞.“在Android上,如果需要安装程序需要终端用户同意。...) binder_poll()pass 掉线程-> wait等待队列,该队列可被睡眠。...当一个线程使用 epoll方式通过使用BINDER_THREAD_EXIT显式退出,该等待队列被释放,但是永远不会从相应的epoll数据结构中删除。...当该进程退出时,epoll将尝试访问等待列表,攻击者可以利用该漏洞,获取root权限。这就是“use-after-free”漏洞。

    65120
    领券