mui 怎么获取openwindow 传值

mui 怎么获取openwindow 传值,第1张

具体步骤如下。

页面初始化时,通过扩展参数传值;

mui在初始化页面时,提供了extras配置参数,通过该参数可以设置页面参数,从而实现页面间传值;mui框架在如下几种场景下,会执行页面初始化 *** 作:

- 通过muiopenWindow,打开新页面(若目标页面为已预加载成功的页面,则在openWindow方法中传递的extras参数无效);

- 通过muiinit,方法创建子页面;

- 通过muiinit,方法预加载页面;

- 通过muipreload,方法预加载页面;

官方:做web app,一个无法避开的问题就是转场动画;web是基于链接构建的,从一个页面点击链接跳转到另一个页面,如果通过有刷新的打开方式,用户要面对一个空白的页面等待;

如果通过无刷新的方式,用Javascript移入DOM节点(常见的SPA解决方案),会碰到很高的性能挑战:DOM节点繁多,页面太大,转场动画不流畅甚至导致浏览器崩溃;

mui的解决思路是:单webview只承载单个页面的dom,减少dom层级及页面大小;页面切换使用原生动画,将最耗性能的部分交给原生实现

一、初识Windows功能增强“插件”MSI

我们经常可以看到许多软件只有一个扩展名为MSI的文件,双击这个文件运行,就会出现和Windows应用软件安装非常相似的安装过程,MSI文件到底是什么?为什么许多软件开始用MSI格式来发行呢?请听我慢慢说来。

1MSI文件的由来

说到MSI文件,不得不先说说Windows Installer,它不只是安装程序,而是可扩展的软件管理系统。Windows Installer的用途包括:管理软件的安装、管理软件组件的添加和删除、监视文件的复原以及使用回滚技术维护基本的灾难恢复。另外,Windows Installer还支持从多个源位置安装和运行软件,而且可以由想要安装自定义程序的开发人员自定义。要想使用这些功能,就必须通过MSI文件。MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。MSI文件将程序的组成文件与功能关联起来。此外,它还包含有关安装过程本身的信息:如安装序列、目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。

2MSI的优势

Windows Installer技术就是合并在一起发挥作用的两个部分:客户端安装程序服务(Msiexecexe) 和Microsoft软件安装(MSI)软件包文件。

Msiexecexe 程序是 Windows Installer 的一个组件。 当 Msiexecexe 被安装程序调用时,它将用 Msidll 读取软件包文件 (msi)、应用转换文件 (mst) 并合并由安装程序提供的命令行选项。 Windows Installer 执行所有与安装有关的任务:包括将文件复制到硬盘、修改注册表、创建桌面快捷方式、必要时显示提示对话框以便用户输入安装首选项。

当双击MSI文件的时候,与之关联的Windows Installer 的一个文件Msiexecexe 被调用,它将用Msidll读取软件包文件(msi)、应用转换文件(mst)进行进一步处理,然后 Windows Installer 执行所有与安装有关的任务:包括将文件复制到硬盘、修改注册表、创建桌面快捷方式,必要时显示提示对话框以便用户输入安装需要的信息,就这样,一个程序安装到了你的电脑上。

采用MSI安装的优势在于你可以随时彻底删除它们,更改安装选项,即使安装中途出现意想不到的错误,一样可以安全地恢复到以前的状态,正是凭着此强大功能,越来越多的软件开始使用MSI作为发行的方式了。 如果你对MSI文件感兴趣,可以用WinRAR等压缩软件打开,看一下里面的内容,满足一下好奇心。

3、MSI格式文件安装支持程序:WinMe和WinXP对MSI支持得很好,但其他版本的Windows就需要安装一个插件才能使用MSI格式的文件。

点这里下载InstMsiW插件

二、定制自己的MSI文件

前面我们介绍了很多MSI文件的内容,其实MSI并不神秘、复杂,我们自己都能制作,并且制作MSI文件的工具已经在Windows的安装盘上了。

首先,找到Windows2000的安装光盘,双击下边的这个位置的文件:valueadd\3rdparty\Mgmt\Winstleadmlemsi,

很快软件就自动安装到了电脑中。在开始菜单的所有程序里边就多了“VERITAS software”组,点击运行里边的“VERITAS discover”就可以开始制作MSI文件了。

制作MSI文件的基本原理就是,在我们安装一个软件以前,先给电脑的磁盘拍个“快照”。然后将要安装的软件安装到电脑中,并对注册表等内容做修改,等到确认这个软件能正确运行后,再给电脑的磁盘拍个“快照”。Discover软件会自动找出两次“快照”的不同,并且生成一个MSI文件。最后,如果你愿意,可以使用VERITAS software组中的另一个工具:Veritas Software Console对这个MSI文件进行进一步的包装、调整,这样一个MSI文件包就生成了。

下面,我们具体通过一个例子来介绍一下如何使用Discover生成一个MSI文件,假定我们的软件my的安装过程是:将myexe文件安装到C:\programmeme files\myprog下,将rundll放到windows\system里,在注册表的HKEY_LOCAL_MACHINE的software项中建立一个myprom项,并且在其中添加一个值为OK的value项目。

第一步:运行Discover,d出程序界面,可以直接点“Next”按钮继续。

第二步:在图3的对话框中,首先在第一文本框为你的程序起个名字,比如这里用的“My programmeme”;第二个对话框是输出MSI文件的存放位置和文件名,这里选择保存为E:\my_setupmsi;第三个框为压缩包的语言,可以使用其默认值。填好后点“Next”按钮。

第三步:为Discover存放快照文件选择一个临时的空间,可以选一个磁盘空间比较大的磁盘。

第四步:在接下来如图4的对话框中要选择Discover需要扫描并拍“快照”的磁盘,你的程序要装到哪个盘就选择哪个盘,并且点一下“Add”按钮加到要扫描文件的列表中,你可以选择几个或者所有的磁盘,不过这样会在扫描的过程中浪费更多的时间,所以应该尽量少选择磁盘。这里只选择C盘,因为我们的软件是装到C盘的。然后点“Next”。

第五步:在如图5所示的对话框中为上一步选择的每个磁盘选择需要扫描的文件夹或文件,因为我们上一步只选择了C盘,所以为C盘选择就可以了。另外,Discover自动加入了一些特殊的文件和目录,我们可以根据需要决定是否将它们移出要扫描的文件列表,不过最好保留它们。这里我们把“C:\programmeme files”和Windows文件夹添进去,先在左边的文件框中点中文件或文件夹,然后点Add按钮就可以了。对于注册表的扫描,Discover为了加快扫描速度,只扫描部分注册表,可以扫描到大部分程序对注册表的修改,如果不放心的话,也可以将下边的“Enhanced Registry Scan”点中,这样速度可能会慢很多,临时文件也大大增加,不过能对注册表所有的改动加以记录。由于我们的软件对注册表只是小改动,所以没必要选择扫描所有注册表。然后点“Next”继续。

第六步:接下来Discover将对系统进行扫描生成“快照”,要耐心的等待,可能要几分钟的时间才行。

第七步:在扫描完成后,会d出一个对话框,大概意思就是告诉你扫描已经完成,问你是否要选择一个程序来运行,从而自动安装你的软件,我们正要制作安装程序,没有程序可运行,所以要点“取消”按钮。

第八步:接下来,我们就要手动安装自己的软件了,先将myexe文件拷贝到C:\programmeme files\myprog下,再把rundll拷贝到windows\system里,然后用注册表编辑器在注册表的HKEY_LOCAL_MACHINE的software项中建立一个myprom项,并在其中添加一个值为OK的value键。注意,除了这些改动,应尽量避免其他无关的改动。然后我们试着运行一下刚刚安装的myexe文件,测试一下是否正确安装。

第九步:确认安装没有问题了,要再次运行Discover程序,这次运行Discover时,出现的是如图6所示的一个界面,有两个选项,第一项是生成安装后的快照,用于与前一次的快照比较生成MSI文件,第二个选项是放弃上一次的扫描,当然要选第一项了,然后点“Next”。这时Discover又开始重新对电脑进行扫描,生成“快照”,并自动生成了安装文件。

第十步:如果你愿意,可以启动与Discover程序在一起的VERITAS Software console对MSI文件的信息进一步更改,过程比较简单,只要先打开一个MSI文件,然后就可以进行改动了,这里就不介绍了。

就这样,我们就生成了一个自己的MSI文件了。

最近接了一个语音控制的功能,UI上的具体实现就是在应用上遮盖一个透明防触层,在语音状态下阻止用户点击,但不能影响物理返回键的Dialog呼出即控制,同时对于非物理返回键呼出的Dialog也要阻止 *** 作。功能看起来很绕,我们用一张来具体说明一下。

通过不难看出,我们要实现的语音控制层其实是介于应用视图与视图内部提示框之上,同时又在Back返回键d窗之下的一个层级。因为一直以来对安卓视图层级的探究不是很深入,所以借着做这个功能对安卓视图层级这一块的知识进行了一下总结梳理。

首先让我们通过一张层级图来明确几个重要的概念Window,DecorView和mContentParent。

在Android中不管是Activity、Toast、ActionBar还是Dialog,他们的视图都是附加到Window上,其实基本上所有的view同时通过Window来呈现的,因此Window可以理解为是view的承载者和管理者。Window 有三种类型,分别是应用 Window、子 Window 和系统 Window。应用类 Window 对应一个 Acitivity,子 Window 不能单独存在,需要依附在特定的父 Window 中,比如常见的一些 Dialog 就是一个子 Window。系统 Window是需要声明权限才能创建的 Window,比如 Toast 和系统状态栏都是系统 Window。

DecorView是Windows中的View的最顶层View。其实DecorView是FrameLayout的子类,它里面包含了一个存有ActionBar以及mContentParent的LinearLayout。

mContentParent这个名字可能会有些陌生,其实他就是我们经常使用的应用根布局,即androidRidcontent。Activity中的setContentView其实就是通过LayoutInflater将XML布局转换成View并添加到mContentParent中。

每个Activity都会持有一个Window,而在安卓中,Window只有唯一的一个实现类PhoneWindow ,所以每个Activity都会持有一个PhoneWindow,在PhoneWindow中会持有顶层视图DecorView。那么Activity是怎么建立与PhoneWindow的联系的呢,让我们通过源码来探究一下:

在Activity的启动过程中会执行ActivityThread的performLaunchActivity方法,其中调用Activity的attach。在attach()方法中实例化Activity持有的mWindow。由于 Activity 实现了 Window 的 Callback 接口,因此当 Window 接受到外界的状态改变时就会回调 Activity 的方法。

可以看到,在PhoneWindow里面,出现了成员变量DecorView。而这里,DecorView则是PhoneWindow里面的一个内部类,它是继承于FrameLayout。

这是我们每次写Activity都会调用的setContentView方法,它的内部调用了getWindow()的setContentView,这个mWindow就是PhoneWindow。

我们看到在PhoneWindow中有三个setContentView的重载方法。在setContentView(int layoutResID)中,首先判断了mContentParent ,如果mContentParent 为空即为第一次调用的时候,就执行installDecor()方法,创建DecorView,并添加到mContentParent上。如果mContentParent不为空,那么将mContentParent中的view移除。接着通过mLayoutInflater将XML转换为View树,并且添加至mContentParent视图中。 添加完成后回调通知onContentChanged,表示完成界面加载。

首先判断mDecor是否为空,如果为空则通过generateDecor创建一个DecorView,紧接着设置DecorView的获取焦点能力为FOCUS_AFTER_DESCENDANTS,即先分发给Child View进行处理,如果所有的Child View都没有处理,则自己再处理。第一次DecorView未加载到mContentParent,所以mContentParent为空,调用generateLayout将setContentView内容添加到mContentParent。

定制过Acitivity的Actionbar或是Fullscreen的同学一定都知道,requesetFeature方法需要在setContentView之前调用,这就是原因。setContentView的实质显示是触发了Activity的resume状态,也就是触发了makeVisible方法。

这里将getWindow()getAttributes()作为了LayoutParams,在WindowManager中:

可以看到Activity的窗口类型是TYPE_APPLICATION,这个TYPE类型决定了在Window层的显示层级,TYPE类型总览如下:

Dialog不属于View,他是应用的子window,所以这也是为什么我们通过给mContentParent添加view无法实现遮挡Dialog的原因。Dialog 中 Window 同样是通过 PolicyManager 的 makeNewWindow 方法来完成的,普通的 Dialog 必须采用 Activity 的 Context,如果采用 Application 的 Context 就会报错。这是因为没有应用 token 导致的,而应用 token 一般只有 Activity 拥有。常规Dialog的TYPE为TYPE_APPLICATION_ATTACHED_DIALOG,通过不同的TYPE层级划分我们可以找到置于常规Dialog之上的WindowManager LayoutParams 属性,例如TYPE_SYSTEM_ALERT与TYPE_TOAST,设置了这两个属性的布局是可以将常规Dialog完全遮盖的。他们的区别在于一个是系统级别的Dialog一个是Toast,系统Dialog需要申请权限。所以我们的第一个方案就是可遮挡的Dialog使用常规Dialog,语音提示框采用TYPE_SYSTEM_ALERT。但是都知道安卓有一个无法逃避的问题,就是厂商定制,在MUI的framework层,出于对“安全”的考虑,默认为用户关闭了悬浮窗权限,也就是是说设置了TYPE_SYSTEM_ALERT属性的视图默认是无法显示的,需要用户手动开启权限以后方可显示。

虽然可以在用户启动的时候根据用户机型选择跳转开启权限页,但作为一个有情怀的开发这种不完美的体验还是不能接受的。根据之前对安卓视图层级的学习,我们有了第二套方案。应用视图是存放于mContentParent他与Activity同属TYPE_APPLICATION Window层级属于最下层,常规Dialog的层级是TYPE_APPLICATION_ATTACHED_DIALOG,所以我们将常规Dialog作为最上层不可遮挡的提示框,下面只需考虑可遮挡的d窗与语音控制两层即可。因为语音控制层需要能够遮挡提示d窗,所以需要语音控制层在d窗的上层,经过之前的学习,我们把d窗加入到mContentParent,把语音控制层添加到DecorView层即可完美的解决问题。mContentParent为一个FrameLayout,应用视图通过sentContentView率先添加到mContentParent中,作为提示d窗,添加顺序一定相对应用视图置后,所以当提示d窗再次向mContentParent添加的时候,即会添加到应用视图之上。而DecorView是mContentParent的父容器,也是一个FrameLayout,添加语音提示框的时候mContentParent一定已经存在,所以添加的时候一定会在mContentParent之上。

就这样,一个看似复杂的需求通过对安卓源码的探究完美的解决了,很多时候当我们遇到难以解决的问题,不妨试试回到问题的原点,思考一下问题的本质,很多时候都会有不一样的发现。

Web前端是一个新兴职业,市场需求大,薪资待遇高,吸引了很多人加入学习。无论是初学小白亦或是自身前端开发人员,好用的软件工具可以帮助他们更好的工作。今天千锋武汉给大家分享一下Web前端开发用什么软件。

1、Sublime Text

Sublime Text是一个代码编辑器也是HTML和散文先进的文本编辑器。漂亮的用户界面和非凡的功能,例如迷你地图,多选择,Python的插件,代码段,等等。完全可自定义键绑定,菜单和工具栏。Sublime Text的主要功能包括:拼写检查,书签,完整的Python API,Goto功能,即时项目切换,多选择,多窗口等等。

2、Dreamweaver

Adobe Dreamweaver使用所见即所得的接口,亦有HTML(标准通用标记语言下的一个应用)编辑的功能,借助经过简化的智能编码引擎,轻松地创建、编码和管理动态网站。 访问代码提示,即可快速了解 HTML、CSS 和其他Web 标准。使用视觉辅助功能减少错误并提高网站开发速度。

3、Visual Studio Code

Visual Studio Code中文版是微软推出的带 GUI 的代码编辑器,软件功能非常强大,界面简洁明晰、 *** 作方便快捷,设计得很人性化。软件主要改进了文档视图,完善了对 Markdown的支持,新增PHP语法高亮。

4、HBuilder

HBuilder是专为前端打造的开发工具,具有飞一样的编码、最全的语法库和浏览器兼容数据、可以方便的制作手机APP、最保护眼睛的绿柔设计等特点。支持HTML、CSS、JS、PHP的快速开发。从开放注册以来深受广大前端朋友们的喜爱。

5、WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

想知道“Web前端开发用什么软件”,通过网上搜索你可以发现很多,而能否很好的借助这些软件完成项目,关键还要看你的技术。千锋武汉网站上有以上这些工具的安装包,需要的小伙伴自己去下载吧。

mui关闭d窗方法是

1、在手机主页面中点击设置选项,再在设置页面中点击第一项个人账户

2、在个人账户中下拉点击设置中的声明与条款,再点击页面中的系统广告,最后取消系统工具广告的勾选即可

以上就是关于mui 怎么获取openwindow 传值全部的内容,包括:mui 怎么获取openwindow 传值、安装包中accessmui是什么,可以用吗、安卓视图层级大揭秘等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/10151931.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存