当前位置: 首页 > news >正文

Launcher 桌面源码笔记二

车模桌面加载成功后,需要各种交互

切换桌面处理

先补充如何切换桌面,初始化需要指定一个默认桌面,初始化其实两个桌面都会一起加载,假设默认是车模桌面,地图将不会初始化操作,但是地图桌面会内嵌到Launcher中

两个桌面是互斥的,基于这种模式下,就需要隐藏另一个桌面,因为切换动效的缘故,这里直接使用setTranslationX移出屏幕外处理

为了让两个桌面互斥,需要通过 mActivityManager.moveTaskToFront(getTaskId(), 0) 方法让两个taskview内嵌的activity只能一个处于前台,另一个pause

public void maybeBringEmbeddedTaskToForeground(int taskId) {if (taskId > 0) {// The task in TaskView should be in top to make it visible.// NOTE: Tried setTaskAlwaysOnTop before, the flag has some side effect to hinder// AccessibilityService from finding the correct window geometry: b/197247311mActivityManager.moveTaskToFront(taskId, /* flags= */ 0);}}
View Code

同时将两个taskview内嵌后,又单独处理了各自的生命周期,达到互斥效果

3D桌面跟Launcher通讯

这里3D桌面需要额外处理,因为3D有个通讯进程,需要监听底层信号对车模进行同步操作,而由于unity无法监听到底层信号,所以需要跟launcher进行跨进程通讯

所以在3D处于pause时,需要将通讯进程也暂停,否则信号会一直发送,并且3D也无法接受信号

override fun setUnityVisible(visible: Boolean) {Log.w(TAG, "setUnityVisible:${visible}")val fragment = UnityPlayerFragment.Currentif (fragment != null && fragment.isLoadUnityFinish) {lastVisibleFromLauncher3 = visibleLog.w(TAG, "setUnityVisible:setInteractionMsg $visible")if (visible) {fragment.resumeUnityPlayer()} else {fragment.pauseUnityPlayer()}}}}
View Code

跨进程通讯接口

package com.carlauncher;
import android.os.Bundle;
import com.carlauncher.IUnityBridgeCallback;interface UnityInterface {oneway void registerUnityBridgeCallback(IUnityBridgeCallback callback);oneway void unregisterUnityBridgeCallback(IUnityBridgeCallback callback);/*** 通知Unity 交互信息传递* 交互信息传输专用,除Adapter都放这里  EX:车衣按钮被点击 | 天气信息传递(bx1e) | 其他** @param msgType 消息类型* @param msgData 消息*/oneway void setInteractionMsg(int msgType, in Bundle bundle);/*** 设置Unity是否处于显示状态*/oneway void setUnityVisible(boolean visible);}
View Code

在service中实现接口,通过setInteractionMsg方法跟unity车模交互通讯

通讯队列

信号不断的上报,需要缓存信号然后实时发送同步到3D,这里需要在子线程中不断轮询

public class AutoPullExecutor<K, E> extends Thread {private static final String TAG = "AutoPullExecutor";private final FilterCache<K, E> mCache;private final List<FilterCacheHelper.OnPullCacheCallback<K, E>> mCallbacks;private boolean mIsRunning = false;public AutoPullExecutor(FilterCache<K, E> cache) {mCache = cache;mCallbacks = new ArrayList<>();}@Overridepublic void run() {Log.d(TAG, "AutoPullExecutor is start");mIsRunning = true;while (mIsRunning) {FilterCache.Node<K, E> node = mCache.poll();if (node == null) {continue;}autoPullCallback(node);}}private void autoPullCallback(FilterCache.Node<K, E> node) {for (FilterCacheHelper.OnPullCacheCallback<K, E> callback : mCallbacks) {callback.onCache(node.key, node.element);}}void addPullCallback(FilterCacheHelper.OnPullCacheCallback<K, E> callback) {mCallbacks.add(callback);}boolean isRunning() {return mIsRunning;}void exit() {mIsRunning = false;interrupt();clear();}void clear() {mCallbacks.clear();}
}
View Code

注册好监听,需要发送信号时添加到缓存队列,轮询判断是否有需要发送的消息,发送完之后移除缓存

 

http://www.jsqmd.com/news/23512/

相关文章:

  • 2025年定制多层重型货架厂家推荐排行榜,仓库货架,重型仓储货架,阁楼货架,立体库货架公司精选
  • 2025年定制钢平台货架厂家推荐排行榜,阁楼式钢平台货架,重型钢平台货架,仓储钢平台货架,定制钢平台货架公司精选
  • 2025年板材重型货架厂家推荐排行榜,重型仓储货架,仓库重型货架,阁楼式重型货架,定制重型货架公司精选!
  • 2025年10月离婚房产律师对比榜:五强权威排名
  • 2025年冷库重型货架厂家权威推荐榜:专业定制重型仓储货架,适用于低温冷库环境,提供耐用承重解决方案及批发采购指南
  • 2025年口碑好的公司注册代理记账外包
  • 2025年热门的目视化规划落地最新推荐榜单集团
  • 2025年定制纺织重型货架厂家推荐排行榜,仓库重型货架,工业重型货架,仓储重型货架,阁楼重型货架公司推荐
  • 2025年靠谱的工厂团餐配送最新推荐榜单品牌
  • 2025年比较好的布里斯班澳洲海外仓电话
  • 新概念1-第一课
  • 2025年热门的logo VI设计实力公司
  • 2025年定制轮胎重型货架厂家推荐排行榜:专业仓储解决方案与耐用性深度解析,工厂直供优质货架公司精选!
  • 2025年质量好的房屋检测鉴定用户好评榜
  • 2025年质量好的鲜香即食涪陵榨菜制造厂家
  • 2025年耐用的双相钢不锈钢焊管厂家推荐及选购指南
  • 2025年定制物流仓库货架厂家推荐排行榜,重型货架,阁楼货架,自动化立库货架,穿梭式货架公司精选
  • 2025年正规的称重地磅TOP品牌厂家排行榜
  • 2025年口碑好的云南房屋加固服务推荐
  • 2025年AGV重型货架厂家推荐排行榜:智能仓储自动化立体库,重型横梁式货架,窄巷道AGV货架系统源头企业精选
  • 2025年比较好的水渠成型机厂家最新热销排行
  • 高级语言程序第二次作业 - 102300317
  • 2025年热门的食品级贴体盒厂家推荐及采购指南
  • 吉利汽车携手阿里云函数计算,打造新一代 AI 座舱推理引擎
  • 2025年窄巷道货架厂家权威推荐榜:定制仓储解决方案专家,高效空间利用率与耐用性深度解析
  • 2025年热门的智能箱式变电站厂家最新推荐排行榜
  • 2025年质量好的恒温恒湿智能柜优质厂家推荐榜单
  • 2025年口碑好的拉伸弹簧厂家最新TOP实力排行
  • 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
  • 2025年TPU厂家推荐排行榜,TPU加纤,TPU改性生产,专业改性TPU材料源头厂家最新精选榜单