⑴ android eclipse如何查看耗時
Traceview是android平台配備的一個很好的性能分析工具。它可以通過圖形化的方式讓我們了解我們要跟蹤的程序的性能,並且能具體到method。android開發中可以用來:方法耗時,性能優化。
(推薦:eclipse使用教程)
使用Traceview查看方法耗時:
1、生成.trace文件
在我們需要追蹤的代碼中,前後輸入:
Debug.startMethodTracing(「test」);//設置參數為生成的trace文件名
####CODE
Debug.stopMethodTracing();
然後運行項目,此時在設備的SD下會生成test.trace文件
2、拷貝文件到電腦
在電腦可以使用adb命令後,輸入如下(把文件拷貝到d:/info目錄下):
adb pull /sdcard/test.trace D:info
3、打開traceview
進入SDK的tools目錄後,命令窗口執行traceview,如下:
traceview D:infodmtrace.trace.
此時traceview視圖便會顯示出來:
上部分:
X軸表示時間消耗,單位毫秒,Y軸表示各個線程,每個線程中不同方法使用不同顏色表示,顏色面積寬,表示佔用cpu時間越長。
下部分:
列1:」Name」表示函數名。
雙擊函數名,可以看到在上半界面是時間軸面圖(Timeline Panel)看他的所消耗的時間段。
雙擊函數名左邊的」+」展開後可以看到,該函數的」parents」和」children」
列2:」incl%」表示函數的Inclusive time在整個MethodTracing時間里占的百分比。
列3:」Inclusive」表示Inclusive time。
列4:」Excl%」表示函數的Exclusive time在整個MethodTracing時間里占的百分比。
重點列:我們關注點
「Calls+RecurCalls/Total」表示對函數的調用次數(包括遞歸調用)。如圖2的toplevel那列為」30+0」表示30次非遞歸調用,0次遞歸調用.
Cpu Time / Call 表示該方法耗時
Real time/Call 實際實際
Real time 包括了cpu的上下文切換、阻塞、GC等等,所以時間比較長,所以我們性能分析重點關註:Calls+RecurCalls/Total, Cpu Time / Call這兩列
更多python知識請關注python視頻教程。
⑵ android的問題,剛才在eclipse上改了點程序,之後運行一看,結果eclipse提示找不到launch,請問怎麼辦
頭一回 遇到你說的問題,你在androidmanifest文件里修改了東西吧 。這里相當於總的調度,你需要好好看一下再改動!
AndroidManifest.xml文件綜合詳解
文章分類:移動開發
一,重要性AndroidManifest.xml是Android應用程序中最重要的文件之一。它是Android程序的全局配置文件,是每個 android程序中必須的文件。它位於我們開發的應用程序的根目錄下,描述了package中的全局數據,包括package中暴露的組件(activities, services, 等等),以及他們各自的實現類,各種能被處理的數據和啟動位置等重要信息。
因此,該文件提供了Android系統所需要的關於該應用程序的必要信息,即在該應用程序的任何代碼運行之前系統所必須擁有的信息。一個典型的Android應用程序的結構如下圖所示:
二,主要功能它指定了該應用程序的Java包:該包名作為應用程序的一個獨特標識。
它描述了應用程序組件:該應用程序由哪些activity,service,broadcast receiver和content provider組成。它指定了實現每個組件的類以及公開發布它們的能力(例如,它們能持有哪個Intent信息)。這些聲明使Android系統知道這兒有什麼組件以及在什麼條件下它們可以被載入。
它決定那些進程將容納應用程序組件。
它聲明了本應用程序必須擁有哪些許可,以便訪問API的被保護部分,以及與其他應用程序交互。
它也聲明了其他應用程序在和該應用程序交互時需要持有的許可。
它列出了Instrumentation類,可以在應用程序運行時提供簡檔和其他信息。這些聲明僅當應用程序在開發和測試過程中被提供;它們將在應用程序正式發布之前被移除。
它聲明了該應用程序所需的Android API的最小化水平。
它列出了該應用程序必須鏈接的庫。
三,主要結構及規則下面列表顯示了manifest文件的通常的結構以及它可以含有的元素。每個元素,連同它的所有屬性,會在各個單獨的文檔里進行充分的描繪。
<?xml version="1.0" encoding="utf-8"?>
<manifest> //根節點,描述了package中所有的內容
<uses-permission /> //請求你的package正常運作所需賦予的安全許可。一個manifest能包含零個或更多此元素
<permission /> //聲明了安全許可來限制哪些程序能使用你的package中的組件和功能。一個manifest能包含零個或更多此元素
<permission-tree />
<permission-group />
<instrumentation /> //聲明了用來測試此package或其他package指令組件的代碼。一個manifest能包含零個或更多此元素
<uses-sdk /> //指定當前應用程序兼容的最低sdk版本號
<application> //包含package中application級別組件聲明的根節點。此元素也可包含 application中全局和默認的屬性,如標簽,icon,主題,必要的許可權,等等。一個manifest能包含零個或一個此元素(不允許多餘一個)
<activity> //用來與用戶交互的主要工具。當用戶打開一個應用程序的初始頁面時一個activity,大部分被使用到的其他頁面也由不同的activity所實現並聲明在另外的activity標記中。
<intent-filter> //聲明了指定的一組組件支持的Intent值
<action />
<category />
<data />
<type/>
<schema/>
<authority/>
<path/>
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>
<service> //Service是能在後台運行任意時間的組件
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<receiver> //IntentReceiver能使你的application獲得數據的改變或者發生的操作,即使它當前不在運行
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>
<provider> //ContentProvider是用來管理持久化數據並發布給其他應用程序使用的組件
<grant-uri-permission />
<meta-data />
</provider>
<uses-library />
<uses-configuration />
</application>
</manifest>
下面是按照字母順序排列的所有可以出現在manifest文件里的元素。它們是唯一合法的元素;你不能加入你自己的元素或屬性。
<action>
<activity>
<activity-alias>
<application>
<category>
<data>
<grant-uri-permission>
<instrumentation>
<intent-filter>
<manifest>
<meta-data>
<permission>
<permission-group>
<permission-tree>
<provider>
<receiver>
<service>
<uses-configuration>
<uses-library>
<uses-permission>
<uses-sdk>
說明:AndroidManifest.xml文件的結構、元素,以及元素的屬性,可以在Android SDK文檔中查看詳細說明。而在看這些眾多的元素以及元素的屬性前,需要先了解一下這些元素在命名、結構等方面的規則:
元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出現一次。如果一個元素包含有其他子元素,必須通過子元素的屬性來設置其值。處於同一層次的元素,這些元素的說明是沒有順序的。
屬性:按照常理,所有的屬性都是可選的,但是有些屬性是必須設置的。那些真正可選的屬性,即使不存在,其也有默認的數值項說明。除了根元素<manifest>的屬性,所有其他元素屬性的名字都是以android:前綴的;
定義類名:所有的元素名都對應其在SDK中的類名,如果你自己定義類名,必須包含類的數據包名,如果類與application處於同一數據包中,可以直接簡寫為「.」;
多數值項:如果某個元素有超過一個數值,這個元素必須通過重復的方式來說明其某個屬性具有多個數值項,且不能將多個數值項一次性說明在一個屬性中;
資源項說明:當需要引用某個資源時,其採用如下格式:@[package :]type :name 。 例如 <activity android:icon=」@drawable/icon 」 . . . >
字元串值:類似於其他語言,如果字元中包含有字元「\」,則必須使用轉義字元「\\」;
四,詳細說明值得一提一些常用之處:
1,幾乎所有的AndroidManifest.xml(以及許多其他Android的xml的文件)在第一個元素中包含了命名空間的聲明 xmlns:android="http://schemas.android.com/apk/res/android"。這樣使得Android中各種標准屬性能在文件中使用,提供了大部分元素中的數據。
2,大部分manifests包含了單個<application>的元素,它定義了所有的application級別組件和屬性,並能在package中使用。
3,任何被用戶看作頂層應用程序,並能被程序啟動器所用的package,需要包含至少一個Activity組件來支持MAIN操作和LAUNCHER種類。動作android.intent.action.MAIN指示這是應用程序的入口點。類別 android.intent.category.LAUNCHER將此Activity放在啟動器窗口中。
在最外層的<manifest>中包含了包名如 package="cn.androidlover.demo" 、軟體的版本號 android:versionCode="1" 以及 android:versionName="1.0"的屬性,而裡面一層的<application>分支中將可能包含Android程序的四種對象 Activity、Service、Content Provider以及Receiver。我們每添加上面四個類型中的任一種新對象都需要在androidmanifest.xml文件中添加相應節點,否則運行時將會產生異常。每一個activity必須要一個<activity>標記對應,無論它給外部使用或是只用於自己的package 中。如果一個activity沒有對應的標記,你將不能運行它。
此文件一個重要的地方就是它所包含的intent-filters。這些filters描述了activity啟動的位置和時間。每當一個 activity(或者操作系統)要執行一個操作,例如:打開網頁或聯系簿時,它創建出一個intent的對象。它能承載一些信息描述了你想做什麼,你想處理什麼數據,數據的類型,和一些其他信息。Android比較了intent對象中和每個application所暴露的intent-filter中的信息,來找到最合適的activity來處理調用者所指定的數據和操作。關於intent的更多信息請訪問Intent參考頁面。
application屬性介紹:
有關AndroidManifest.xml文件的application分支我們有必要了解一些常見的屬性,這里可以看到一些我們實用的選項,比如允許調試android:debuggable、任務關系android:taskAffinity,比如我們常見的方式創建一個新的任務實用標記 FLAG_ACTIVITY_NEW_TASK,為程序制定一個主題,可以使用android:theme指向一個主題文件。平時我們創建的程序使用一些安全敏感項,會需要請求系統許可許可權,這里可以使用android:permission來制定相關的許可,每個程序的service、 activity、content provider、receiver都需要在application的節點內實現。有關完整的屬性可以查看:
<application android:allowClearUserData=["true" | "false"]
android:allowTaskReparenting=["true" | "false"]
android:debuggable=["true" | "false"]
android:description="string resource"
android:enabled=["true" | "false"]
android:hasCode=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:manageSpaceActivity="string"
android:name="string"
android:permission="string"
android:persistent=["true" | "false"]
android:process="string"
android:taskAffinity="string"
android:theme="resource or theme" >
. . .
</application>
另外:Activity的屬性常用的可能為android:name和android:label兩個,但我們需要了解所有的屬性以幫助解決復雜的問題,完整的如下:
android:allowTaskReparenting=["true" | "false"]
android:alwaysRetainTaskState=["true" | "false"]
android:clearTaskOnLaunch=["true"" | "false"]
android:configChanges=[one or more of: "mcc" "mnc" "locale" "touchscreen" "keyboard" "keyboardHidden" "navigation" "orientation" "fontScale"]
android:enabled=["true" | "false"]
android:excludeFromRecents=["true" | "false"]
android:exported=["true" | "false"]
android:finishOnTaskLaunch=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"]
android:multiprocess=["true" | "false"]
android:name="string"
android:noHistory=["true" | "false"]
android:permission="string"
android:process="string"
android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nonsensor"]
android:stateNotNeeded=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme"
android:windowSoftInputMode=[one or more of: "stateUnspecified" "stateUnchanged" "stateHidden" "stateAlwaysHidden" "stateVisible" "stateAlwaysVisible" "adjustUnspecified" "adjustResize" "adjustPan"]
從Provider節點中用到的定義,可以看到包含了許可權控制、排序方式完整的如下:
<provider android:authorities="list"
android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:grantUriPermissions=["true" | "false"]
android:icon="drawable resource"
android:initOrder="integer"
android:label="string resource"
android:multiprocess=["true" | "false"]
android:name="string"
android:permission="string"
android:process="string"
android:readPermission="string"
android:syncable=["true" | "false"]
android:writePermission="string" >
</provider>
而對於服務相關定義如下:
<service android:enabled=["true" | "false"]
android:exported[="true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
</service>
最後是Broadcast使用的Receiver定義,一般配合和隱式處理。
<receiver android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
</receiver>
總之,AndroidManifest.xml文件雖然看起來復雜,但是,只要我們理清中裡面各元素的作用,那麼一切就變得簡單了。
⑶ android eclipse 怎麼查看類的繼承關系
android eclipse查看類的繼承關系的方法:
1、用Open Declaration可以查看類、方升派法和變數的聲明,在要追蹤的基笑余對象上點右鍵,選擇Open Declaration
2、用Open Type Hierarchy可以查看類的繼承關系,可以在Hierarchy窗口看到繼承層次的導航。在方法或類名上點擊右鍵,選擇Open Type Hierarchy即可
3、用Open Call Hierarchy可以查看方法的調用層次,快捷鍵是搏滾Ctrl+Alt+H。
4、用Open Super Implemention可以查看當前方法在父類中的實現或介面中的聲明(前提是該方法是對父類或介面中相應方法的重寫),在方法名上點擊右鍵,選擇Open Super Implemention即可
⑷ 如何找到eclipse默認的android簽名文件
兩種方法:
第一種:通過eclipse工具查找
打開eclipse開發工具 找到window選項
下宏拆一步:找到android選項,點開後下面有幾個選項,
下一步:找到build選項 右側出來一個界蔽芹棗面顯示信息
顯示的就是簽名文件信息 包括默認簽名文件路徑和首絕md5值等等
第二種方法:
C盤\用戶(user)\用戶名(administrator)\.android\debug.keystore
⑸ 如何在eclipse裡面找到android中的類ViewRootImpl
在Eclipse中是找不到ViewRootImpl類的,因為ViewRootImpl類是隱藏的,android並沒有開放這個類
可以到androidsdk的source目錄下尋找
這里我們使用window的文件查找來找
我們可以看到這個類被hide註解即談首睜隱藏含歲了