Android 學習系列 Itent

2021-09-19 05:03:45 字數 2830 閱讀 8073

對比android 和 ios的很大不同點是, ios的應用是沙箱,android的應用卻可以相互呼叫。 而intent主要解決的問題就是解決android 應用元件之間的通訊問題。 intent

也可以理解為對將要執行的操作的抽象描述。

public intent(context packagecontext, class<?> cls)
// activity 繼承自context的startactivity 方法

public abstract void startactivity(intent intent, bundle options);

// 建立itent

intent i = new intent(this, imageactivity.class);

startactivity(i);

可以通過 intent 傳遞一些 flags(標識)來通知 activitymanager 去改變既定行為。

// 傳遞資料, extras 儲存在 android 的 bundle中,bundle 在這裡可以被看做是乙個可序列化的容器。

i.putextra("a_boolean_extra", true); //boolean extra

i.putextra("an_integer_extra", 3); //integer extra

i.putextra("a_string_extra", "three"); //integer extra

// imageactivity

if (getintent() != null )

假如乙個物件已實現序列化介面 serializable。接下來可以這麼做:

yourcomplexobject obj = new yourcomplexobject();

intent i = new intent(this, imageactivity.class);

i.putserializable("some_fancy_name", obj); //使用接收序列化物件的方法

startactivity(i);

yourcomplexobject obj = (yourcomplexobject) getintent().getserializableextra("some_fancy_name");
intents 和 services 是怎麼協作的呢?

首先需要乙個 intent 來啟動 service。而 service 啟動後,只要其處於非 stopped 狀態,就可以持續地向它傳送指令,直到它被停止(在這種情況下它將會重新啟動)。

在某個 activity 中啟動服務:

intent i = new intent(this, yourservice.class);

i.setaction("some_command");

startservice(i);

接下來程式執**況取決於當下是否第一次啟動服務。如果是,那麼服務就會自然啟動(首先執行構造方法和 oncreate() 方法)。如果該服務已經啟動過,將會直接呼叫 onstartcommand() 方法。

@override

public int onstartcommand(intent intent, int flags, int startid)

return start_not_sticky; // 如果服務已被殺掉,不要重新啟動服務

}

private final class servicereceiver extends broadcastreceiver 

@override

public void onreceive(final context context, final intent intent) else if (intent.getaction().equals("action_play"))

// 等等…

}}

// context 抽象方法 

public abstract intent registerreceiver(broadcastreceiver receiver, intentfilter filter);

@override

public void onstart()

@override

public void onstop()

如果應用依賴外部的activity, 但是不能保證外部應用是否已經安裝, 那麼可以通過packagemanger來判斷

intent intent = new intent(intent.action_dial, uri.parse("tel:13422272867"));

packagemanger pm = getpackagemanager();

componentname cn = intent.resolveactivity(pm);

if (cn == null) else

當應用需要依賴外部應用返回值的時候,比如本地**獲取activity

啟動方式為:

startactivityforresult(intent);

@override

public void onactivityresult(int requestcode, int resultcode, intent data)

}

android學習系列五 布局

linearlayout tablelayout的使用 巢狀的使用方法 relativelayout android layout below將該控制項置於給定id的控制項之下 android layout above將該控制項置於給定id的控制項之上 android layout toleftof...

學習筆記 android 系列樣式大全

1.android visibility 設定空間可見屬性 有三個值,visible 可見 invisible 不可見 gone 隱藏 區別是不可見選項在介面不保留空間所佔空間,隱藏選項時控制項所佔空間保留。中設定方法 view.setvisibility view.visible view.inv...

Android原始碼學習系列 Parcelable

實現了該介面的類可以被寫入儲存在parcel中。如果實現該介面需要有乙個實現了parcelcreator介面的靜態欄位creator 乙個典型的實現如下 public class myparcelable implements parcelable public void writetoparcel...