Android 最小化实践
最近在工作中,接到语音直播间开发的需求。由于此前没有做过类似功能,遂进行记录一下。
实现此功能有以下步骤:
1:启动模式
2:启动Activity:startActivity 和 startActivityForResult的区别
3:服务
一、启动模式
设置activity启动模式为singleInstance,然后设置taskAffinity使activity运行在独立的activity任务栈中。设置taskAffinity后,安卓后台任务会显示独立的activity任务栈(参考微信小程序),为了避免重复的在后台显示activity任务栈,需要在当前activity的清单文件中设置 android:excludeFromRecents="true"。
二、启动Activity
安卓启动activity ,我们通常会使用startActivity或startActivityForResult,后者退出时会走OnActivityForResult回调。在activity启动模式为singleInstance模式下,使用startActivityForResult将导致启动模式不起作用。目前还不清楚是什么原因。希望了解的大佬解释下,感谢!
三、开启服务
前面说了这么多,终于进入到最小化环节。首先,最小化要设置当前任务栈moveTaskToBack(true), 参数如果为false,则只有当活动是根时才有效,如果是true,它将工作于任何activity任务。将任务栈移到后台后,我们需要开启一个服务,在服务的onStartCommand回调中添加一个窗口视图
LayoutInflater layoutInflater = LayoutInflater.from(this);//悬浮窗口显示的viewdisplayView = layoutInflater.inflate(R.layout.party_windows_layout, null);windowManager.addView(displayView, layoutParams);
然后设置点击视图,再跳回到移入后台的activity任务栈中的activity ,
Intent intent = new Intent(context, TestActivty.class)intent.addCategory(Intent.CATEGORY_LAUNCHER);intent.setAction(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);context.startActivity(intent);
移除窗口视图,关闭服务。
if (displayView != null && windowManager != null) {// 移除悬浮窗口windowManager.removeView(displayView);stopSelf();}
至此,我们已经完成了安卓activity的最小化实践。虽然完成了基本的最小化功能,但是目前还有一个问题需要解决:
最小化后,在打开其他app后,独立任务栈中的Activty会被销毁,但是和其同一进程下的app并没有被销毁。这个不知道是安卓回收机制的问题,还是其他设置的问题,目前还没有很好的解决,后续会继续看下有没有更好的解决方案。
Android 最小化实践相关推荐
- Android组件化实践2——经典组件化项目架构
Android组件化实践2--经典组件化项目架构 京东的采用aab( Android App bundles)之后的架构图 安居客项目架构演化 参考:https://zhuanlan.zhihu.co ...
- Android 最小化界面
Android界面最小化实现 在开发蓝牙模块功能时,涉及到蓝牙电话界面的最小化以及恢复功能. 在Activity中调用moveTaskToBack(boolean nonRot)方法即可将Activi ...
- 微店 Android 插件化实践
随着微店业务的发展,App 不可避免地也遇到了 65535 的大坑.除此之外,业务模块增多.代码量增大所带来的问题也逐渐显现出来.模块耦合度高.协作开发困难.编译时间过长等问题严重影响了开发进程.在预 ...
- Android 插件化原理入门笔记
Android开发笔记 onGithub 笔记,参考7.2中所列参考文章所写,DEMO地址在PluginTestDemoApplication 1.综述 2015年是Android插件化技术突飞猛进的 ...
- 美团外卖Android平台化的复用实践
美团外卖平台化复用主要是指多端代码复用,正如美团外卖iOS多端复用的推动.支撑与思考文章所述,多端包含有两层意思:其一是相同业务的多入口,指美团外卖业务需要在美团外卖App(下文简称外卖App)和美团 ...
- java 最小化 api_Java的API设计实践
Introduction 了解在设计Java API时应该应用的一些API设计实践.通常,这些实践很有用,并确保API可以在模块化环境中正确使用,例如OSGi和Java平台模块系统(JPMS).有些做 ...
- VirtualAPK:滴滴 Android 插件化的实践之路
一.前言 在 Android 插件化技术日新月异的今天,开发并落地一款插件化框架到底是简单还是困难,这个问题不同人会有不同的答案.但是我相信,完成一个插件化框架的 Demo 并不是多难的事儿,然而要开 ...
- Android组件化开发实践(九):自定义Gradle插件
本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...
- android界面最小化实现,Android-Android 怎么实现应用程序最小化到后台运行,不被系统kill...
Android中的应用进程可以分为两种:一种是"体验型"进程,一种是"性能型"进程."体验型"进程即可以与用户进行交互的进程,"性 ...
最新文章
- 光耦p621引脚图_开关电源中光耦电路的设计与优点
- 愿只有一个Grid Layout
- 可以查到的资料和可以淘到的原件 DIY 四轴
- linux头文件怎么编译,microsoft编译器怎么使用Linux头文件
- SpringCloud Feign实战(二)
- 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>
- simplejson.scanner.JSONDecodeError: Extra data: line 1 column 22089 - line 1 column 22090
- 万元大奖邀您参与阿里云数加 MaxCompute最佳实践征文大赛
- python高级-异常(13)
- mstp专线能透传vlan吗_什么是MSTP专线?MSTP专线特点
- C语言单链表的应用,单链表应用
- 惠普打印机驱动安装找不到打印机
- 基于python的数据管理系统的设计_基于Python的自然语言数据处理系统的设计与实现...
- GATK / 体细胞短变异检测工具Mutect2的使用
- 143_iOS干货50_认识几个概念:跨域问题和内网穿透
- 离别,总免不了有些悲伤
- Android安全启动学习(五):Android Verified Boot 2.0
- 向量组秩及其极大线性无关组求解浅析
- 最简单的视频网站(JavaEE+FFmpeg) 转载自: Mr.Rico
- Python爬虫——Cookie模拟登录
热门文章
- 不同进程log占有量分析
- linux内存管理机制以及free命令详解
- Lua脚本介绍以及编辑器的介绍
- 开启9008端口进入深刷模式
- Nginx 七层及四层反向代理配置
- 设计模式(10):行为型-中介者模式(Mediator)
- 给出3个参数,N,M,K,怪兽有N滴血,等着英雄来砍自己,英雄每一次打击,都会让怪兽流失[0~M]的血量,到底流失多少?每一次在[0~M]上等概率的获取一个值,求K次打击之后,英雄把怪兽砍死的概率
- Oracle数据库中的锁,闪回操作(二)
- go语言教程零基础入门到精通
- 【selenoid】selenoid的配置、安装、使用、Docker + Selenoid 搭建Selenium UI自动化运行环境、Docker中的Selenium、Selenium Grid