⑴ android parcelable有沒有限制大小
androidintent傳遞數據是沒有數量限制的,但是Parcelable是將數據存到內存中的ROM中,數量是沒有限制的,但是一個android應用進程最大使用16MB的內存。Intent是一種運行時綁定(run-timebinding)機制,它能在程序運行過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達某種請求或者意願,Android會根據意願的內容選擇適當的組件來完成請求。比如,有一個Activity希望打開網頁瀏覽器查看某一網頁的內容,那麼這個Activity只需要發出WEB_SEARCH_ACTION給Android,Android就會根據Intent的請求內容,查詢各組件注冊時聲明的IntentFilter,找到網頁瀏覽器的Activity來瀏覽網頁。在Android中實現Parcelable介面的類可以支持序列與反序列化,以下是一個實現的舉例:1.實現Parcelable介面2.添加實體屬性3.覆寫writeToParcel(Parceldest,intflags)方法,指定寫入Parcel類的數據。4.創建Parcelable.Creator靜態對象,有兩個方法createFromParcel(Parcelin)與newArray(intsize),前者指定如何從Parcel中讀取出數據對象,後者創建一個數組。5.覆寫describeContents方法,默認返回0。
⑵ Android intent能不能自定義category
你當然可以自己定義啦,但是呢~ 一般情況他是有個DEFAUT的Intent 可以包含一個Action 與 多個Category 的,其中更可以包含data
⑶ android怎麼返回上一個Activity啊
在A中啟動B時這樣寫
Intent intent=new Intent(MainActivity.this,SecMainActivity.class);
startActivityForResult(intent, 1);
然後在
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
}
這個函數中處理,關於這個函數你可以搜一下用法,
在B中關閉頁面時這樣寫
Intent data=new Intent();
data.putExtra("datacount", (addPingLunCount));
BoSecMainActivityhis.setResult(1, data);
⑷ Android中AM、PM、mpsys命令使用總結
am指令是 activity manager的縮寫,可以啟動Service、Broadcast,殺進程,監控等功能,這些功能都非常便捷調試程序。
可以通過adb shell 進入Android 的Linux命令界面,輸入am -help查看詳細命令,先介紹幾個簡單用法,
命令格式如下
命令列表:
原理分析:am命令實的實現方式在Am.java,最終幾乎都是調用ActivityManagerService相應的方法來完成的,am monitor除外。比如前面概述中介紹的命令am start -a android.intent.action.VIEW -d https://amberweather.com , 啟動Acitivty最終調用的是ActivityManagerService類的startActivityAsUser()方法來完成的。再比如am kill-all命令,最終的實現工作是由ActivityManagerService的killBackgroundProcesses()方法完成的。
下面說一下[options]和 <INTENT>參數的意義以及如何正確取值。
主要是啟動Activity命令am start [options] <INTENT>使用options參數,接下來列舉Activity命令的[options]參數:
啟動Activity的實現原理: 存在-W參數則調用startActivityAndWait()方法來運行,否則startActivityAsUser()。
命令
例如: 向pid=12345的進程,發出level=RUNNING_LOW的收緊內存命令
level取值范圍為: HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE
am的子命令,startservice, stopservice, broadcast, kill, profile start, profile stop, mpheap的可選參數都允許設置--user <USER_ID>。目前市面上的絕大多數手機還是單用戶模式,因此可以忽略該參數,默認為當前用戶。
例如:啟動id=10001的用戶的指定service。
Intent的參數和flags較多,為了方便,這里分為3種類型參數,常用參數,Extra參數,Flags參數
實例
(1). 基本類型
參數es是Extra String首字母簡稱,實例:
(2). 數組類型
參數eia,是Extra int array首字母簡稱,多個value值之間以逗號隔開,實例:
(3). ArrayList類型
參數efal,是Extra float Array List首字母簡稱,多個value值之間以逗號隔開,實例:
pm工具為包管理(package manager)的簡稱,可以使用pm工具來執行應用的安裝和查詢應用寶的信息、系統許可權、控制應用,pm工具是Android開發與測試過程中必不可少的工具,shell命令格式如下:
原理分析:pm命令實的實現方式在Pm.java,最後大多數都是調用PackageManagerService相應的方法來完成的。disbale之後,在桌面和應用程序列表裡邊都看到不該app。
查看所有的package,
[options]參數:
disabled + enabled = 總應用個數; 系統 + 第三方 = 總應用個數。
查看第3方應用:
查看已經被禁用的包名
<FILTER>參數
當FILTER為不為空時,則只會輸出包名帶有FILTER欄位的應用;當FILTER為空時,則默認顯示所有滿足條件的應用。
例如,查看包名帶有weather欄位的包名
[options]參數:
<PATH>參數: 指的是需要安裝的apk所在的路徑
mpsys是Android自帶的強大debug工具,從名字就可以看出,主要是用於mp 當前android system的一些信息,是一項分析手機問題,運行狀態,使用情況等十分有效的手段。
實現原理
mpsys的源碼結構其實很簡單,只有一個mpsys.cpp
/frameworks/native/cmds/mpsys/mpsys.cpp
先通過defaultServiceManager()函數獲得ServiceManager對象,然後根據mpsys傳進來的參數通過函數checkService來找到具體的service, 並執行該service的mp方法,達到mp service的目的。
不同的Android系統版本支持的命令有所不同,可通過下面命令查看當前手機所支持的mp服務,先進入adb shell,再執行如下命令:mpsys -l。 這些服務名可能並看不出其調用的哪個服務,可以通過下面指令:service list。
服務列表有很多,這里簡單介紹幾種
通過下面命令可列印具體某一項服務:mpsys <service>,其中service便是前面表格中的服務名
接下來主要說下mpsys activity 用法
命令
options可選值
mpsys activity等價於依次輸出下面7條指令:
cmd可選值
命令
返回結果
上面的輸出結果可以分為以下四個部分
也可以只輸出某個pid或package的進程信息:
下面以AmberLocker作為實例進行分析
場景1:查詢某個App所有的Service狀態
解讀:Service類名為com.amber.lockscreen.LockerHeartService,包名為mobi.infolife.ezweather.locker.locker_2,baseDir(apk路徑)為/data/app/mobi.infolife.ezweather.locker.locker_2-2/base.apk,dataDir((apk數據路徑)
運行在進程pid=1115,進程名為進程名為mobi.infolife.ezweather.locker.locker_2,,uid=10060,還有創建時間等信息
場景2:查詢某個App所有的廣播狀態
場景3:查詢某個App所有的Activity狀態
場景4:查詢某個App的進程狀態
格式:ProcessRecord{Hashcode pid:進程名/uid},進程pid=941,進程名為mobi.infolife.ezweather.locker.locker_2:live,uid=10060.
該進程中還有Services,Connections, Providers, Receivers,
場景5:查詢棧頂Activity
mpsys 的命令還有很多,這里就不一一列舉了。
⑸ android問題:intent.setClass(FirstActivity.this, SecondActivity.class);
這是android的傳遞對象方法。從第一個activity跳轉到另一個activity,setClass就是傳遞對象基礎類設置。假如我們設置2個活動布局,一個是登陸界面logen一個是主界面mainfrm。他的登錄按鈕切換界面寫法就是:
Intentit=newIntent();
it.setClass(logen.this,mainfrm.class);
startActivity(it);
要傳參還要用it.putExtra方法,它實際上是這種方法:
Intentit=newIntent(logen.this,mainfrm.class);
startActivity(it);
就是java語言、C#的new對象一樣。