1. android虛擬機創建打開後這樣子,除了電源鍵點啥都沒反應,6.0版本的
你這用什麼開發環境?現在最好用Android Studio。模擬器也最好用第三方的吧。比如什麼genymotion之類的。模擬器卡可能是沒有開硬體加速,也可能是電腦不行。一般用真機好一點。
2. 安卓模擬器怎麼鎖屏啊!誰知道,還有安卓模擬器的電源鍵是哪個
直接右上角關掉就行了,反正任務欄還在後台運行著。。。
3. hd2 卡上裝android系統後 電源鍵出來的選項 重新引導中 recovery 和hot restart有什麼區別
Hot restart應該是熱啟動的意思,就是在android系統下重啟後還是進入android系統。第一項Normal是正常重啟,重啟後進入的是WM系統,然後再手動切換到android系統下!
recovery應該是類似於恢復出廠設置的意思吧,但是我沒試過,不太確定!貌似模擬的android系統無法恢復出廠設置,因為恢復出廠設置過程要重啟,然後就直接到WM系統下了,再進入android系統沒什麼變化,畢竟是模擬的!要恢復的話,可能要重新刷下模擬的android系統。
4. android10編程如何摸擬電源鍵
有root可以用一鍵鎖屏軟體,加音量鍵喚醒。就可以代替了。現在的手機一般都有智能喚醒,你可以找找,就是雙擊喚醒和上滑喚醒
5. 安卓模擬器 如何配置 如何關機
關閉google更新忘了,關機長按電源鍵。點擊關機即可!
如無效,更換內核或者更換系統,推薦分區版、
ps;找不到內核我再發給你、
6. 安卓模擬器怎麼開機
這樣一直開不了。八成是你的api沒更新完全。 小部分可能是電腦自身的問題。。android 佔用內存很大。
7. 安卓手機如何設置電源鍵掛斷電話
若使用vivo手機,可以進入設置--(應用與許可權)--(系統應用設置)--電話--開啟「按電源鍵掛斷來電」,不支持通話中掛斷電話。
溫馨提示:開啟後,來電時第一次按電源鍵,可將來電置為靜音,第二次按電源鍵,可將來電掛斷,沒有此開關則代表不支持此功能。
8. 當我們按下電源鍵,Android 究竟做了些什麼
一、啟動電源及系統啟動
系統從 ROM 中開始啟動,載入引導程序到 RAM ,然後執行。
二、引導程序引導程序是 Android 操作系統開始運行前的一個小程序,因此它需要針對特定主板與晶元,並不是 Android 操作系統的一部分。引導程序是OEM廠商或運行商進行加鎖、限制的地方。
1、兩個階段 檢測外部 RAM 以及為第二階段載入程序; 設置網路、內存等,搭建內核運行環境(為了達到特殊目的時,引導程序可以根據配置參數或者輸入數據來設置內核)。 2、引導程序的載入器Android引導程序可以在ootableootloaderlegacyusbloader找到,傳統的載入器包含的兩個文件:
init.s 初始化堆棧,清零BSS段,會調用 main.c 中的 _main()函數 (bss segment:通常是指用來存放程序中未初始化的全局變數的一塊內存區域;BSS - Block Started by Symbol。BSS段屬於靜態內存分配); main.c 初始化硬體,創建 linux 標簽。 三、內核啟動Android 內核啟動方式類似桌面 linux,主要步驟:
1. 設置緩存 2. 被保護存儲器 3. 計劃列表 4. 載入驅動
當內核完成系統設置,接下來即將啟動系統的第一個進程 —init 進程
四、init 進程作為 Android 系統的第一個進程,其PID為0,通過解析 init.rc 腳本來構建出系統初始運行形態,這一階段中,「Android」 logo 會顯示出來。
備註:系統中,大多數系統服務程序都是在該腳本中描述並被相繼啟動的。
init.rc 由4種類型聲明組成:Actions、Commands、Services、Options
Actions: 響應某事件的過程。當「trigger」所描述的觸發事件產生時,則依次執行各種「command」; 源碼角度來看,系統會對 init.rc 中各「trigger」進行匹配,當發現符合條件的 Action,就將它加入「命令執行隊列」尾部(除非 Action 已存在隊列中),然後系統再對這些命令按順序進行。 on <trigger> ##觸發條件 <command1> ##執行命令 <command2> ##可執行多個命令 ... Commands: 命令將在所屬事件發生時被一個個執行。 Services: 可執行程序,它們在特定選項的約束下會被 init 程序運行或者重啟 備註:Service 可以在配置中指定是否需要退出重啟,那麼,當 Service 出現異常 crash 時,可有機會復原。 service <name><pathname> [<argument>]* <option> <option> Options: 對 service 的約束選項 五 &六、 ServiceManager、Zygote、SystemServer科普: Daemons - 守護進程
init進程通過解析 init.rc 來陸續啟動其他關鍵的系統服務進程,其中最重要的是 ServiceManager、Zygote 和 SystemServer 三者,下面我們逐一解析:
1、ServiceManager — Binder 機制支撐者概述:ServiceManager 是 Binder 機制中的支撐者,負責某 Binder 服務注冊信息到底層 Binder 驅動分配的值解析。
ServiceManager 由 init 進程解析 rc 腳本時啟動,屬於 core 類,其他同類進程包括:uenetd、console、adbd等。根據 core 組的特性,這些進程會同時啟動或停止。另外,ServiceManager 配置含有 critical 屬性,這意味著它是系統關鍵進程(如果進程不幸在4分鍾內異常退出超過4次,設備將重啟並進入還原模式)。當 ServiceManager 每次重啟時,其他關鍵進程:zygote、media、surfaceflinger 等也會被 restart。
2、Zygote — 「孕育」新線程與進程Android 中大多數應用進程與系統進程都是通過 Zygote 來生成的。Zygote 同樣由 init 解析 rc 腳本時啟動,屬於 main 類,同屬 main 類的系統進程有:netd、debuggerd、rild等。Zygote並不是處於獨立的程序中的,它所在程序名為「app_process」,觀察 app_process 主函數實現知道,如果 init.rc 中指定了 —zygote選項,app_process 接下來將啟動「ZygoteInit」,並傳入「start-system-server」,這樣,ZygoteInit 就會運行在虛擬機上(Dalvik VM)上了。
ZygoteInit 函數有兩項重要工作:
預裝載各種系統類; 搭建 SystemServer 環境,並啟動 SystemServer(大部分的 Android 系統服務都在其中,由 Java 編寫)。ZygoteInit 流程總結(摘自:Gityuan — Android 系統啟動-Zygote 篇):
解析init.zygote.rc中的參數,創建AppRuntime並調用AppRuntime.start()方法; 調用AndroidRuntime的startVM()方法創建虛擬機,再調用startReg()注冊JNI函數; 通過JNI方式調用ZygoteInit.main(),第一次進入Java世界; registerZygoteSocket()建立socket通道,zygote作為通信的服務端,用於響應客戶端請求; preload()預載入通用類、drawable和color資源、openGL以及共享庫以及WebView,用於提高ap啟動效率; zygote完畢大部分工作,接下來再通過startSystemServer(),fork得力幫手system_server進程,也是上層framework的運行載體; zygote功成身退,調用runSelectLoop(),隨時待命,當接收到請求創建新進程請求時立即喚醒並執行相應工作。ZygoteInit 結束後,開機Logo就出來了。 注意:這里並不包括開機動畫,而是開機前 「Android」 Logo 出現的那個畫面,開機動畫出現之前還需要進行各種載入,開機動畫是在「Android」 Logo 出現之後才播放的。
3、SystemServer — 大部分 Android 系統服務所在地SystemServer 是 Android 進入 Launcher 前的最後准備,它提供了眾多的由「Java」語言編寫的系統服務。 如果 init.rc 中為 zygote 指定啟動參數 —start-system-server,那麼 ZygotyeInit 就會調用 startSystemServer 來進入 SystemServer。
startSystemServer函數解析:
首先 ZygoteInit 通過 Zygote.forkSystemServer 來生成一個新的線程(fork),用於承載各種系統服務。(源碼角度:Zygote 內部由 Native 函數 Dalvik_dalvik_system_Zygote_forkSystemServer 來進一步實現,最終調用底層介面的 fork 介面來實際產生進程); 根據fork特性,子進程與父進程將獲得相同的代碼環境。pid為0為子進程,否則為父進程;如果是前者,則進一步調用 handleSystemServerProcess(parseArgs)函數來完成最核心的工作 —「啟動各系統服務」(源碼角度:handleSystemServerProcess 方法將 startSystemServer 中的 parsedArgs.remainingArgs 參數傳給 RuntimeInit.zygoteInit,後者又調用 nativeZygoteInit 函數); nativeZygoteInit 調用後,接著,三個重要的 static 函數就要被執行了:init1 - 完成本地Service(SurfaceFlinger、AudioFlinger等)啟動,完成後調用 init2、init2 - 新建一個新的帶 Looper 的線程 ServerThread來啟動 Java層各 Service。9. android物理鍵
* Android常用的物理按鍵及其觸發事件
* KEYCODE_POWER 電源鍵
* KEYCODE_MENU 菜單鍵
* KEYCODE_BACK 後退鍵
* KEYCODE_HOME Home鍵
* KEYCODE_CAMERA 相機鍵
* KEYCODE_SEARCH 查找鍵
* KEYCODE_VOLUME_UP 音量鍵+
* KEYCODE_VOLUME_DOWN 音量鍵-
* KEYCODE_VOLUME_MUTE 靜音
* 方向鍵
* KEYCODE_DPAD_CENTER
* KEYCODE_DPAD_UP
* KEYCODE_DPAD_DOWN
* KEYCODE_DPAD_LEFT
* KEYCODE_DPAD_RIGHT
* 鍵盤鍵
* 數字0~9 字母A~Z
* KEYCODE_0 ~ KEYCODE_9
* KEYCODE_A ~ KEYCODE_Z
* 提供的回調方法有
* onKeyUp()、OnKeyDown()、onKeyLongPress()
*
* @author Administrator
*
*/
public class MainActivity extends Activity {
private Button btnClose = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnClose = (Button) findViewById(R.id.btnClose);
btnClose.setOnClickListener(new closelistener());
}
class closelistener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
}
/**
* 重寫onKeyDown方法可以攔截系統默認的處理
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "後退鍵", Toast.LENGTH_SHORT).show();
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
Toast.makeText(this, "聲音+", Toast.LENGTH_SHORT).show();
return false;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
Toast.makeText(this, "聲音-", Toast.LENGTH_SHORT).show();
return false;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {
Toast.makeText(this, "靜音", Toast.LENGTH_SHORT).show();
return false;
} else if (keyCode == KeyEvent.KEYCODE_HOME) {
Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* 重寫onTouchEvent方法可以處理Touch事件
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_MOVE) {
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
}
return super.onTouchEvent(event);
}
}
更多的事件可以參考SDK文檔的MotionEvent、KeyEvent兩個類,在KeyEvent中如果處理了KeyEvent.KEYCODE_BACK事件,那就不會執行默認的操作,比如收到KeyEvent.KEYCODE_BACK事件後默認是退出,如果直接return那就不會處理退出了。