最近在工作中,接到语音直播间开发的需求。由于此前没有做过类似功能,遂进行记录一下。

实现此功能有以下步骤:

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 最小化实践相关推荐

  1. Android组件化实践2——经典组件化项目架构

    Android组件化实践2--经典组件化项目架构 京东的采用aab( Android App bundles)之后的架构图 安居客项目架构演化 参考:https://zhuanlan.zhihu.co ...

  2. Android 最小化界面

    Android界面最小化实现 在开发蓝牙模块功能时,涉及到蓝牙电话界面的最小化以及恢复功能. 在Activity中调用moveTaskToBack(boolean nonRot)方法即可将Activi ...

  3. 微店 Android 插件化实践

    随着微店业务的发展,App 不可避免地也遇到了 65535 的大坑.除此之外,业务模块增多.代码量增大所带来的问题也逐渐显现出来.模块耦合度高.协作开发困难.编译时间过长等问题严重影响了开发进程.在预 ...

  4. Android 插件化原理入门笔记

    Android开发笔记 onGithub 笔记,参考7.2中所列参考文章所写,DEMO地址在PluginTestDemoApplication 1.综述 2015年是Android插件化技术突飞猛进的 ...

  5. 美团外卖Android平台化的复用实践

    美团外卖平台化复用主要是指多端代码复用,正如美团外卖iOS多端复用的推动.支撑与思考文章所述,多端包含有两层意思:其一是相同业务的多入口,指美团外卖业务需要在美团外卖App(下文简称外卖App)和美团 ...

  6. java 最小化 api_Java的API设计实践

    Introduction 了解在设计Java API时应该应用的一些API设计实践.通常,这些实践很有用,并确保API可以在模块化环境中正确使用,例如OSGi和Java平台模块系统(JPMS).有些做 ...

  7. VirtualAPK:滴滴 Android 插件化的实践之路

    一.前言 在 Android 插件化技术日新月异的今天,开发并落地一款插件化框架到底是简单还是困难,这个问题不同人会有不同的答案.但是我相信,完成一个插件化框架的 Demo 并不是多难的事儿,然而要开 ...

  8. Android组件化开发实践(九):自定义Gradle插件

    本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...

  9. android界面最小化实现,Android-Android 怎么实现应用程序最小化到后台运行,不被系统kill...

    Android中的应用进程可以分为两种:一种是"体验型"进程,一种是"性能型"进程."体验型"进程即可以与用户进行交互的进程,"性 ...

最新文章

  1. 光耦p621引脚图_开关电源中光耦电路的设计与优点
  2. 愿只有一个Grid Layout
  3. 可以查到的资料和可以淘到的原件 DIY 四轴
  4. linux头文件怎么编译,microsoft编译器怎么使用Linux头文件
  5. SpringCloud Feign实战(二)
  6. 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>
  7. simplejson.scanner.JSONDecodeError: Extra data: line 1 column 22089 - line 1 column 22090
  8. 万元大奖邀您参与阿里云数加 MaxCompute最佳实践征文大赛
  9. python高级-异常(13)
  10. mstp专线能透传vlan吗_什么是MSTP专线?MSTP专线特点
  11. C语言单链表的应用,单链表应用
  12. 惠普打印机驱动安装找不到打印机
  13. 基于python的数据管理系统的设计_基于Python的自然语言数据处理系统的设计与实现...
  14. GATK / 体细胞短变异检测工具Mutect2的使用
  15. 143_iOS干货50_认识几个概念:跨域问题和内网穿透
  16. 离别,总免不了有些悲伤
  17. Android安全启动学习(五):Android Verified Boot 2.0
  18. 向量组秩及其极大线性无关组求解浅析
  19. 最简单的视频网站(JavaEE+FFmpeg) 转载自: Mr.Rico
  20. Python爬虫——Cookie模拟登录

热门文章

  1. 不同进程log占有量分析
  2. linux内存管理机制以及free命令详解
  3. Lua脚本介绍以及编辑器的介绍
  4. 开启9008端口进入深刷模式
  5. Nginx 七层及四层反向代理配置
  6. 设计模式(10):行为型-中介者模式(Mediator)
  7. 给出3个参数,N,M,K,怪兽有N滴血,等着英雄来砍自己,英雄每一次打击,都会让怪兽流失[0~M]的血量,到底流失多少?每一次在[0~M]上等概率的获取一个值,求K次打击之后,英雄把怪兽砍死的概率
  8. Oracle数据库中的锁,闪回操作(二)
  9. go语言教程零基础入门到精通
  10. 【selenoid】selenoid的配置、安装、使用、Docker + Selenoid 搭建Selenium UI自动化运行环境、Docker中的Selenium、Selenium Grid