A. 法兰克加工中心操作面板各按键的意思分别是什么
一、功能键
2、OUTPUT :输出程序及指令。
3、OFFSET:储存刀具长度、半径补偿值。
4、AUX GRAPH :显示图形。
5、PRGRM :显示程序内容。
6、ALARM :显示发生警报内容或代码 。
7、POS :显示坐标 。
8、DGONS PARAM :显示自我诊断及参数功能。
9、RESET :复位。
10、CURSOR: 光标上下移动。
11、PAGE:翻页键 。
12、ALTER:修改程序及代码 。
13、INSRT:插入程序及代码。
14、START: 输出程序及指令。
15、EOB :程序段结束符。 EOB键就是键入一个“;”号或“*”号。
16、CAN :取消。编辑方式下使用 或 MDI 方式下使用。
17、G :准备功能, 指令动作方式。
18、M :辅助功能, 机床M代码指令。
19、F: 进给速度, 进给速度的指令。
20、T: 刀具功能 ,刀具编号指令。
21、I :坐标字, 圆弧中心X轴向坐标。
22、J :坐标字, 圆弧中心Y轴向坐标。
23、K :坐标字, 圆弧中心Z轴向坐标。
24、P: 暂停或程序中某功能的开始使用的程序号。
25、L :重复次数 ,固定循环及子程序的重复次数。
26、D: 补偿号, 刀具半径补偿指令。
27、N :顺序号 ,顺序段序序号。
28、U :坐标字, 与X轴平行的附加轴的增量坐标值或暂停时间。
29、V :坐标字 ,与Y轴平行的附加轴的增量坐标值。
30、W: 坐标字, 与Z轴平行的附加轴的增量坐标值。
31、R :坐标字, 固定循环中的定距离或圆弧半径的指定。
32、X: 坐标字, X轴的绝对坐标值或暂停时间。
33、Y :坐标字 ,Y轴的绝对坐标值。
34、Z: 坐标字 ,Z轴的绝对坐标值。
35、A: 坐标字, 绕X轴旋转。
36、B :坐标字 ,绕Y轴旋转
37、C :坐标字, 绕Z轴旋转。
38、E :第二进给功能。
39、H: 补偿号, 补偿号的指定。
40、O: 顺序号, 顺序号、子程序顺序号的指定。
41、Q :固定循环终止段号或固定循环中的定距。
42、S :主轴功能 ,主轴转速指令。
43、 PRG STOP :程序停止,与M00共享。
44 、HOME: 返回X.Y.Z.各轴机械原。
45、 JOG: 手动进给,行位或切削 。
46 、MPG: 手动驱动器 。
50、 HIGH: 手动快速进给 。
51、 SPDL DEC:主轴(RPM)速 。
52 、SPDL 100%:执行程序中S指速 。
53 、SPDL CW: 主轴顺时钟转动 。
54 、SPDL STOP: 主轴停止 。
55、 SPDL CCW: 主轴逆时钟转动 。
56、 SPDL INC: 主轴(RPM)增速 。
57 、Z+,Y+,X+ :机床X.Y.Z.轴往正方向动 。
58、 Z-,Y-,X-: 机床X.Y.Z.轴往负方向移动 。
59、 4-,4+: 机床第四轴 。
60、 TRVRS: 执行机床各轴移动指令 。
61、 CLNT ON :供应切削液 。
62、 CLNT OFF :停止供应切削液 。
63、 CLNT AUTO :自动执行供应切削液 。
64 OVERRIDE: 切削速度随控 0--150% 。
65、 EMERGENCY STOP: 紧急停止。
66 、THERMAL ALARM: 主轴负荷过热报警。
67 、LUB ALARM :润滑油不足报警 。
68 、X_MIRROR IMAGE :X轴镜像加工功能 。
69 、Y_MIRROR IMAGE :Y轴镜像加工功能。
70、 RAPID OVERRIDE: 快速行程。
71 、DNC 直接数控: 由于外部接口设备输入程序至数控机床,而又因子控机床本身记忆容量有限,需要执行边读边做(即同时执行收取程序和执行程序指令动作),称为DNC操作。当完成DNC操作后,数控机床记忆是不存在的,由DNC输入之程序。
72、 BACKGROUD EDIT 背景编程:( BG-EDIT ) 当数控机床执行自动(AUTO)加工时,可同时输入或编写另一程序,而不需耍停止操作。
73、 MANU ABS 手动绝对值 。
74、 PROG RSTAT 程序再起动。
75 、Z NEGLT 取消执行Z轴指令 。
76 、AXIS LOCK 取消执行三轴指令 。
77、 B 第五轴。
78、 PROGRAM PROTECT: 程序记忆保护开关。
79、MEMORY :自动执行程序 。
80、 EDIT: 编辑 。
81、 MDI: 手动编辑 。
82、 SINGL BLOCK :单句执行 。
83、 BLOCK DELET :指定不执行单句程序 ,与 / 键共享)。
84、OPT STOP :选择性停止 ,与M01码共享 。
85、 DRY RUN :空运行 。
86、PRG TEST: 不执行M.S.T.码指令 。
87、 CYCLE START: 循环动,执行程序 。
88、CYCLE STOP: 循环停止,暂停程序。
B. 你遇到的前端面试题都有什么
大家好,我是王我。
随着春节的结束,各个行业也普遍开始了上班的节奏, 不过本人17号才上班。为什么?因为长得帅的都上班比较晚。 当然,每到新年结束,又迎来了一批招聘者与面试者,我来说说作为一年工作经验应该知道的面试题。
HTML篇
1.doctype是什么?有哪些类型?
2.input有哪些新类型?简要说明其8用法。
3.HTML5有哪些新特性,移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?
4.bootstrap响应式的原理是什么?
5.多移动终端页面适配是如何实现的?
CSS篇
1.如何实现两列布局,左边自适应,右边固定宽度?
2.用CSS画一个三角形
3.CSS实现字体大写
4.display有哪些常用的属性值?分别是什么意思?
5.position为absolute,relative,fixed的定点位置
6.用三种方法清除浮动
7.请介绍一下margin塌陷问题
js篇
1.什么是事件冒泡和捕获?如何阻止事件冒泡?(分别用原生和jquery实现)
2.js创建对象,至少使用三种方法
3.简述一下事件穿透以及解决办法
4.用三种方式判断变量类型是否是数组
5.如何实现对象的拷贝?
6.什么是闭包?闭包的优缺点。
7.简述一下ajax请求的过程。
8.简述一下new一个人构造函数的人过程。
9.为什么会有跨域?是怎么解决跨域问题的?简述一下原理。
10.js原始数据类型有哪些?
11.学一个函数,判断一个变量是否是字符串
12.typeof有哪些结果?
13.剪头函数和普通函数有什么区别?
14.请用三种方法实现数组去重
15.href和src有什么区别?
jquery篇
1.attr()和prop()有什么区别?
2.on和bind有什么区别?js动态添加的dom元素是通过on还是bind?
3.touch和click有什么区别?
4.window.onload和jquery的ready有什么区别?
vue篇
1.简述一下vue的生命周期及其特点
2.vue双向绑定的原理是什么?
3.vue的特点有哪些?和jquery有什么区别?
4.父子组件之间传递数据的方法
5.子组件如何共享数据?
6.一般有什么工具进行数据交互?
7.webpack的原理是什么?
8.简述一下$nextTick的用法
浏览器篇
1.cookie、sessionStorage、localStorage的区别是什么?
2.有用过浏览器缓存吗?简述一下基本的缓存机制
网络篇
1.http和https之间的区别
2.从服务器的安全考虑,是使用get请求还是post请求?
3.URL请求的过程有哪些?
项目经验篇
1.项目中遇到的最大挑战以及解决办法
2.常见的网页优化有哪些?
作为一个面试一年以内工作经验的前端程序员来说,以上的问题能够倒答如流月薪6k应该不成问题啦。这些面试题也是我在很多面试中感觉经常被问到的题目。
希望大家年后找工作能够顺顺利利, 千万不要跟我一样哦,只有帅气就一无所有了。
大家好,我是王我,中国最帅的前端程序员。
前几次都是各种培训公司,各种忽悠就不提了,说说后面4次面试的经历。
第一次是面一个小公司,不过他们好像没有厉害的前端,来面我的是个后端,一来没有问我关于js的知识,直接问我以前做过什么,有没有经验,我本人不会吹牛,简历也没怎么包装,就是自己把自学的知识和做的几个小demo弄在上面,也用github挂在页面上了,不过他根本不点开看,也不问,问我会不会vue,我当时对框架还不了解,他就说他们需要能直接上手开始写的,所以我第一个就直接挂了。
第二次面试是一个国企,这个问了很多问题,都很基础,js数据类型,数组操作,事件,大概就是高程的前面几章看看就差不多都能答到,然后因为他们主要用jq,所以问了很多jq的操作,关于节点的,动画的,我看锋利的jq大概看了3遍,也练过多次,所以我答的很熟。然后问了些布局方面的,bootstrap我了解过,又看过css3,所以这方面也没啥问题,最后在现场做了个题目,主要就是布局然后通过ajax呈现数据。后面听介绍我面试的说面试官比较满意,说我jq很熟,一面就过了。可惜后面电话面试不知怎么回事可能表现的不够自信,虽然没问技术,但是我没啥自信,把没项目经验什么的也不知怎么就一五一十交代了,估计因为这个挂掉了。
第三次没问问题,直接就是一套题开做,我在那做了一个多小时。题目就是按照要求一步一步做一个页面出来,我也搞忘了我当时卡在哪个地方了,坐在那得时候就是做不出来,没有设计图,要根据他的描述自己找个设计图然后做,我第一次遇到这个有点懵,虽然当时没做出来,不过回来我自己花了几个小时把它做了。所以这个也是凉了。
第四个问的比较多,数据类型,数组操作,跨域,ajax,闭包,原型链,继承,深拷贝,浅拷贝,模块amd cmd,基本都是问的js。然后问了html5的新特性 css3 的新特性,遇到过什么浏览器的兼容性问题,怎么解决的,以后想往什么方面发展。这个时候我已经会点vue了,照着做了个小demo,不过后来知道公司用的angularjs,面试官也没看我做的,问也没问。。以前听网上说要带上自己的项目去面试感觉没起多大效果。
最后总结下如果面的比较初级的岗位,应该主要问js,原型链,继承,闭包,深浅拷贝,ajax,跨域,然后js的基础知识,对了还有apply和call也问了,html5的新特性了解下就行。主要就是看你js掌握的程度,如果稍微要求高一点的,暂时还没面过,等以后面过在来回答
1. cookie session 的用途和区别,以及有效期
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
2. vue的数据绑定原理,mvvm与mvc的区别
MVVM:
m:model数据模型层 v:view视图层 vm:ViewModel
vue中采用的是mvvm模式,这是从mvc衍生过来的
MVVM让视图与viewmodel直接的关系特别的紧密,就是为了解决mvc反馈不及时的问题
图片说明一下:
说到MVVM就要说一下双向绑定和数据劫持的原理,
MVC:
m:model数据模型层 v:view视图层 c:controller控制器
原理: c层需要控制model层的数据在view层进行显示
MVC两种方式,图片说明:
总结:
mvvm与mvc最大的区别:
MVVM实现了view与model的自动同步,也就是model属性改变的时候, 我们不需要再自己手动操作dom元素去改变view的显示,而是改变属性后该属性对应的view层会自动改变。
不懂得可以复制链接查看:
https://www.pianshen.com/article/3716256399/
3. storage 的区别 sessionStorage localStorage
localStorage 的生命周期是永久性的。假若使用localStorage存储数据,即使关闭浏览器,也不会让数据消失,除非主动的去删除数据,使用的方法如上所示。localStorage有length属性
sessionStorage 的生命周期是在浏览器关闭前。也就是说,在整个浏览器未关闭前,其数据一直都是存在的。sessionStorage也有length属性,其基本的判断和使用方法和localStorage的使用是一致的
有一个文本框 通过v-bind绑定了value属性 值为myname 是我们在vue实例中定义的属性
传统我们获取文本框值方法 可能通过getElementById找到文本框 然后获取其value属性
但是vue中直接通过v-bind绑定了value属性 所以不需要像之前那样获取值
所以在后面的按钮中获取name值 直接获取vue实例对象data里面的myname属性即可
【数据为尊 ----数据映射到浏览器 如果数据v-model后修改(肯定input)然后到数据在有数据映射到浏览器页面 ----映射关系统称】
缓存路由组件
使用的是vue的一个组件,参考vue的官方文档
使用这个东西可以保证我们在切换组件的时候,原来显示的组件不被销毁
-----【保障组件的数据不会被切换路由而销毁数据】
Home是对应的组件对象的名字,不是路由的名字
6.多维数组拍平
数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组
一红六种方法吧……
了解的请看: https://www.cnblogs.com/guan-shan/p/10165737.html
7.跨域的原因 解决方案
跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。
这样就可以说同源策略----协议---端口---域名
原生的src和href可以解决跨域
代理可以解决
请求头也可以携带浏览器提示的也可以解决
一般都是后端解决跨域问题
【别的需要了解看下方链接】
https://blog.csdn.net/qq_41604383/article/details/100770100
8.uniApp兼容问题§ 如果你使用cli创建项目(即项目根目录是package.json),不管用什么ide,即便是用HBuilderX,切记cli项目的编译器是在项目下的,HBuilderX不管怎么升级都不会影响编译器版本。你需要手动npm update来升级编译器。以及如果你想要安装less、scss等预编译器,也需要自己npm安装在项目下,而不是在HBuilderX的插件管理里安装。
§ 如果你使用离线打包,请注意HBuilderX升级后,真机运行基座和云打包对应引擎跟随HBuilderX升级,而你的sdk需要手动升级。sdk的版本升级一般滞后HBuilderX正式版升级一两天。
§ 如果你使用自定义基座,之前制作的自定义基座是不会跟随HBuilderX升级的,升级HBuilderX后你应该重新制作新版自定义基座。
§ 如果你使用wgt升级,新版HBuilderX编译的wgt,运行到之前的runtime上,一定要先测试好,看有没有兼容性问题。如果有问题,就不要wgt升级,整包升级。
§ 考虑到向下兼容,uni-app编译器在升级为新的自定义组件模式后,同时保留了对老编译模式的向下兼容。
在HBuilderX alpha版中,App端一定会使用新编译器,不理会manifest配置。
在HBuilderX 正式版中,新创建的项目会使用新编译器,老项目不会强制使用,而是开发者自己在manifest里配置开启。
§ 如果你使用其他ide开发uni-app,会经常因为拼错单词而运行失败,因为经过webpack编译一道,很多错误反应的不够直观,排错时间很长,不如从开始就依赖有良好提示的HBuilderX,避免敲错单词。
§ 云打包的引擎版本说明
HBuilderX Alpha,只有1套云打包机,不管你的HBuilderX alpha版本多少,对应的打包机一定是最新的alpha版的客户端引擎。
HBuilderX正式版,有2套打包机,一个是最新正式版,一个是次新正式版。
中间的紧急更新版本没有独立打包机。
举个例子:
HBuilderX 有1.8.0、1.8.1、1.8.2、1.9.0、1.9.1这几个正式版。
那么当前可用的打包机有1.9.1和1.8.2这2台。(即每个大版本的最后一个版本)
除了这2个HBuilderX版本外,其他版本的云打包都指向最新的1.9.1版对应的打包机。(即只保留2个大版本的云打包机)
【详情请看】
https://ask.dcloud.net.cn/article/35845
一、HTML
HTML书写规范
H5新增标签
HTML渲染过程
二、CSS
css盒子模型概念
css弹性布局概念
三、javaScript
事件模型
DOM2级事件模型
闭包
原型链
四、移动Web开发
常见的布局方案
移动端前端常见的触摸相关事件touch、tap、swipe等整理
移动端前端手势事件
移动端页面渲染优化
GPU渲染
GPU核心渲染过程
五、调试
常用的调试工具
Chrome控制台调试js使用
移动端测试
六、HTTP网络知识
常见的HTTP状态码
不同请求类型的区别
WEB缓存方案
——————————
牛客网(www.nowcoder.com)
- 专业IT笔试面试备考平台
- 最全C++JAVA前端等互联网技术求职题库
- 全面提升IT编程能力
- 程序员交友圣地
分享了一些Web前端的面试题,限时一小时,你看看自己能够答出多少道!
放心,这些面试题都是一些非常基础的知识,只要你在平时认真听课、学习了,那么这些面试题肯定不会难道你。
建议:虽然没有人监督你,但还是希望你不要去寻找答案,脱离网络,拿起纸笔,你试一下自己究竟能够答出个什么水平!有没有真本领?答案尽在这些面试题里!那么,你准备好了吗?OK!计时开始!
一、HTML常见题目01、Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
02、HTML5为什么只需要写?
03、行内元素有哪些?块级元素有哪些?空(void)元素有那些?
04、页面导入样式时,使用link和@import有什么区别?
05、介绍一下你对浏览器内核的理解?
06、常见的浏览器内核有哪些?
07、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?
08、如何区分HTML和HTML5?
09、简述一下你对HTML语义化的理解?
10、HTML5的离线储存怎么使用,工作原理能不能解释一下?
二、CSS类的题目01、介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?
02、CSS选择符有哪些?哪些属性可以继承?
03、CSS优先级算法如何计算?
04、CSS3新增伪类有那些?
05、如何居中p?如何居中一个浮动元素?如何让绝对定位的p居中?
06、display有哪些值?说明他们的作用。
07、position的值relative和absolute定位原点是?
08、CSS3有哪些新特性?
09、请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?
10、用纯CSS创建一个三角形的原理是什么?
三、Java类的题目
01、介绍Java的基本数据类型。
02、说说写Java的基本规范?
03、Java原型,原型链?有什么特点?
04、Java有几种类型的值?(堆:原始数据类型和栈:引用数据类型),你能画一下他们的内存图吗?
05、Java如何实现继承?
06、Java创建对象的几种方式?
07、Java作用链域?
08、谈谈This对象的理解。
09、eval是做什么的?
10、什么是window对象?什么是document对象?
OK,一小时到了,这个时间可不算短了,那么这些面试题你答出了几道呢?你写的答案正确了吗?现在你可以去翻看答案了。
如果你答出了绝大多数的或者是全部的题,并且答案也正确了,那么恭喜你……
你这时心里是不是有点小窃喜,认为自己有能力拿高薪了?虽然我也很想这么告诉你,但事实上这只能表明你的基础扎实,毕竟这只是一些非常基础的面试题。骚年~继续努力吧!
如果你只答出了小部分或者答出了大部分题但答案不正确,那么我只想说:“骚年,你的水平还差的远呢。”连这么基础的题你都打不出来,还想拿高薪?回去再练一段时间吧!
扎实的基础是你拿高薪的重要武器,如果你连基础都不扎实,那么想要攻克“高薪”这个厚实的堡垒,那只是痴人说梦罢了。
1.前端框架类问题,问你会不会用vue react啊
2.语言类,问你一些JavaScript语言的问题
3.项目经验,让你讲讲做过的项目,遇到的问题和解决之道
C. 求专业人士在编程中一些输入的技巧,用以提升编程输入速度
首先要熟悉方向键上面的那一块按键,这些都是些简便输入的按键。
Insert一般很少用到,是插入功能,按下了,你在一个字符前输入一个字符,那么后面的那个字符就会消失。
Home是编程者必备的按键,指的是回到这一行的第一个字符。
pageup和pagedown是翻页,一般用于很大篇幅的转移光标,懒得动鼠标时用的。
Delete是删除光标后面的一个字符,是←的反转版。
End是把光标移动到这一行的最后。
其次就是一些技巧性的问题了。每一个相对应的东西都应该首位先打好,以防漏掉。比如C的大括号,打完开头的那个就应该很顺手的按两下回车,输入尾括号,然后再回到中间打。
一些关键字要记熟,比如Var,Integer这些。
格式要对好,这是很多新手的共同缺陷,每一层的程序就应该要空两个,比如你一个for语句中:
for(var i,i<=20,i++)
{
for(var a,a<=20,a--)
{
......
}
}
这样是不好的书写格式
for(var i,i<=10,i++)
{
for(var a,a<=10,a--)
{
......
}
}
这是好的书写习惯,好的书写习惯可以更好地看出出错的地方,都堆在一堆就会影响阅读,除非你编完以后就以后都不修改,也不给人看,那就你喜欢怎样写怎样写。
然后就多练打字,熟能生巧。
【弱弱地补上一句:当你和喜欢的异性聊天时..你的打字速度将会达到平时的10倍哦~】
望采纳、
D. 编程中home键有什么用
android4.0之后应用程序无法再获得Home键消息,这样是对滴,但如果想自己写Launcher就得对Home键相关的一些消息进行处理了。
Home消息是在android framwork中处理的,我们找到Home键处理相关的代码(不想细看的可以直接看最后)
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 中的
PhoneWindowManager.java interceptKeyBeforeDispatching 函数中有以下内容
// First we always handle the home key here, so applications
// can never break it, although if keyguard is on, we do let
// it handle it, because that gives us the correct 5 second
// timeout.
if (keyCode == KeyEvent.KEYCODE_HOME) {
// If we have released the home key, and didn't do anything else
// while it was pressed, then it is time to go home!
if (mHomePressed && !down) {
mHomePressed = false;
if (!canceled) {
// If an incoming call is ringing, HOME is totally disabled.
// (The user is already on the InCallScreen at this point,
// and his ONLY options are to answer or reject the call.)
boolean incomingRinging = false;
try {
ITelephony telephonyService = getTelephonyService();
if (telephonyService != null) {
incomingRinging = telephonyService.isRinging();//是否正好有电话打进来
}
} catch (RemoteException ex) {
Log.w(TAG, "RemoteException from getPhoneInterface()", ex);
}
if (incomingRinging) {
Log.i(TAG, "Ignoring HOME; there's a ringing incoming call.");//来电中的时候可以看到 打印个消息就完了
} else {
launchHomeFromHotKey();//可以看到这里有launchHome,应该是这里通知了Launcher程序,继续往下看
}
} else {
Log.i(TAG, "Ignoring HOME; event canceled.");
}
return -1;
}
// If a system window has focus, then it doesn't make sense
// right now to interact with applications.
//这一段没有看的很明白,不过很明显没有对Home键处理,只是判断了一些情况然后返回了
WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;
if (attrs != null) {
final int type = attrs.type;
if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
|| type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
// the "app" is keyguard, so give it the key
return 0;
}
final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
for (int i=0; i<typeCount; i++) {
if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
// don't do anything, but also don't pass it to the app
return -1;
}
}
}
if (down) {
if (repeatCount == 0) {
mHomePressed = true;
} else if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) {
if (!keyguardOn) {
handleLongPressOnHome();//作为长按Home键处理
}
}
}
return -1;
}
现在我们再进入 launchHomeFromHotKey(); 函数看看
/**
* A home key -> launch home action was detected. Take the appropriate action
* given the situation with the keyguard.
*/
void launchHomeFromHotKey() {
if (mKeyguardMediator.isShowingAndNotHidden()) {
// don't launch home if keyguard showing
//这个keyguard不知道是什么东东,反正它启动了就不响应Home键,系统已经处理了,跟Launcher没关系
} else if (!mHideLockScreen && mKeyguardMediator.isInputRestricted()) {
// when in keyguard restricted mode, must first verify unlock
// before launching home
mKeyguardMediator.verifyUnlock(new OnKeyguardExitResult() {
public void onKeyguardExitResult(boolean success) {
if (success) {
try {
ActivityManagerNative.getDefault().stopAppSwitches();//关闭这个东东
} catch (RemoteException e) {
}
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);//关闭这个东东
startDockOrHome();//启动Dock或者Home 很明显这三个函数都很重要 一个一个去看看
}
}
});
} else {
// no keyguard stuff to worry about, just launch home!
//这里跟上面是一样处理的
try {
ActivityManagerNative.getDefault().stopAppSwitches();
} catch (RemoteException e) {
}
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);
startDockOrHome();
}
}
进入sendCloseSystemWindows,startDockOrHome两个函数看看
void sendCloseSystemWindows() {
sendCloseSystemWindows(mContext, null);
}
void sendCloseSystemWindows(String reason) {
sendCloseSystemWindows(mContext, reason);
}
static void sendCloseSystemWindows(Context context, String reason) {
if (ActivityManagerNative.isSystemReady()) {
try {
ActivityManagerNative.getDefault().closeSystemDialogs(reason);//又是调用这个了
} catch (RemoteException e) {
}
}
}
void startDockOrHome() {
Intent dock = createHomeDockIntent();
if (dock != null) {
try {
mContext.startActivity(dock);//启动HomeDock这个Dock好像是自定义的主界面,这里就不管了
return;
} catch (ActivityNotFoundException e) {
}
}
mContext.startActivity(mHomeIntent);//启动HomeIntent(其实就是发一个Intent消息到主界面)
}
我们再看看mHomeIntent是怎么定义的
Intent mHomeIntent;
mHomeIntent = new Intent(Intent.ACTION_MAIN, null);
mHomeIntent.addCategory(Intent.CATEGORY_HOME);
mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
Launcher中接受Intent的地方在
Launcher2\Launcher2\src\com\android\launcher2\launcher.java
protected void onNewIntent(Intent intent) {}函数中
这里就不分析了,先试试能不能接受到再说。
nnd搞了半天Launcher根本没接受Home键,按Home键时farmwork直接给Launcher调到最前面来了。