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調到最前面來了。