Android 에서 Intent 클래스 를 통 해 구성 요소 간 호출 을 실현 하 는 방법
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
위의 코드 는 제3자 Activity 를 호출 할 수 있 습 니 다.(제3자 브 라 우 저 를 시작 하여 바 이 두 홈 페이지 를 엽 니 다.)Intent 는 암시 적 이 고 명시 적 인 구분 이 있 습 니 다.위의 것 입 니 다.
Intent intent = new Intent(Intent.ACTION_VIEW);
만 든 intent 는 암시 적 Intent 라 고 합 니 다.암시 적 인 Intent 를 구축 하려 면 action 을 표시 하 는 문자열 이 필요 합 니 다(예 를 들 어 Intent.ACTIONVIEW 의 값 은"android.intent.action.VIEW"입 니 다.Android 는 이 action 을 처리 할 수 있 는 Activity(manifest 파일 에 있 는 이 Activity 의 intent-filter 에서 설명)를 찾 아 호출 합 니 다.때때로 여러 개의 Activity 가 특정한 action 을 처리 할 수 있다 고 설명 할 수 있 습 니 다.예 를 들 어:
<activity
android:name=".Activity1">
<intent-filter>
<action android:name="com.abc.def" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".Activity2">
<intent-filter>
<action android:name="com.abc.def" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
위의 Activity 1 과 Activity 2 는"com.abc.def"의 action 을 처리 할 수 있다 고 밝 혔 기 때문에 다음 코드 를 실행 할 때
Intent intent = new Intent("com.abc.def");
startActivity(intent);
Activity 1 과 Activity 2 가 모두 요구 에 부합 합 니 다.Android 는'Complete Action Using'대화 상 자 를 꺼 내 서 사용자 가 실행 할 Activity 를 선택 하도록 합 니 다.주의해 야 할 것 은 암시 적 Intent 호출 과 일치 하려 면 DEFAULT 의 category(즉,
암시 적 인 Intent 에 대해 서 는 action 외 에 도 다양한 정 보 를 제공 하여 안 드 로 이 드 가 최 적 화 된 매 칭 을 선택 하 는 데 도움 을 줄 수 있다.또한 추가 할 수 있 는 다른 정 보 는 host,mimeType,path,pathPattern,pathPrefix,port,scheme 입 니 다.
예 를 들 어 위 Activity 2 의 manifest 설정 에 mimeType 속성 을 추가 합 니 다.
<activity
android:name=".Activity2">
<intent-filter>
<action android:name="com.abc.def" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="abc/def"/>
</intent-filter>
</activity>
그러면:
Intent intent = new Intent("com.abc.def");
startActivity(intent);// Activity1
/********************************************/
Intent intent = new Intent("com.abc.def");
intent.setType("abc/def");
startActivity(intent);// Activity2
Intent 를 만 들 때 호출 할 클래스(예 를 들 어 new Intent(xx Activity.this,xx.class)를 가리 키 거나 setComponent 를 통 해 지정)를 가리 키 면 이러한 Intent 는 Intent 를 표시 하 는 것 이 라 고 합 니 다.명시 적 Intent 에 대해 서 는 호출 할 구체 적 인 종 류 를 가 리 켰 기 때문에 Android 는 action,category,data 속성 을 무시 합 니 다.(개인 적 으로 Intent 호출 이 암시 적 인 것 보다 빠르다 고 생각 합 니 다)
Serializable vs Parcelable
Android 는 주로 Intent 를 통 해 구성 요소 간 의 상호 호출 을 실현 하 는 동시에 추가 데 이 터 를 전달 할 수 있 습 니 다.이 데 이 터 는 주로 Bundle 에 저 장 됩 니 다.
Bundle 에 서 는 기본 데이터 형식 을 저장 하고 Serializable 또는 Parcelable 인 터 페 이 스 를 실현 하 는 클래스 를 저장 할 수 있 습 니 다.
Bundle 에 Obj(int 구성원 두 개 를 포함 하 는 간단 한 클래스)를 저장 하려 면 Serializable 또는 Parcelable 인 터 페 이 스 를 실현 할 수 있 습 니 다.다음 과 같 습 니 다.
1.Serializable
public class Obj implements Serializable {
private int a;
private int b;
public Obj(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public String toString() {
return "Obj: [" + a + ", " + b + "]";
}
}
우 리 는 intent.putExtra("obj",new Obj(1,2)를 통 해인 텐트 에 넣 고 obj=(Obj)인 텐트.getSerializableExtra("obj")를 통 해꺼 내 라.2.Parcelable
public class ObjPar implements Parcelable {
private int a;
private int b;
public ObjPar(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public String toString() {
return "Obj: [" + a + ", " + b + "]";
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(a);
dest.writeInt(b);
}
public static final Parcelable.Creator<ObjPar> CREATOR = new Creator<ObjPar>() {
@Override
public ObjPar[] newArray(int size) {
return new ObjPar[size];
}
@Override
public ObjPar createFromParcel(Parcel source) {
return new ObjPar(source.readInt(), source.readInt());
}
};
}
우 리 는 intent.putExtra("obbpar",new ObjPar(1,2)를 통 해인 텐트 에 넣 고 obbpar 를 통 해= (ObjPar) intent.getParcelableExtra("objpar"); 꺼 내 라.이상 은 Bundle 에 Object 대상 을 저장 하 는 두 가지 방법 으로 Serializable 인 터 페 이 스 를 실현 하 는 것 이 더욱 간단 하 다 는 것 을 알 수 있다.왜냐하면 그 는 표 시 된 인터페이스 이기 때문에 구체 적 인 방법 을 실현 할 필요 가 없다.파 르 셀 라 블 인 터 페 이 스 를 실현 하 는 것 보다 상대 적 으로 복잡 해 보이 지만 성능 이 크게 향상 되 는 것 이 장점 이다.이것 은 우리 가 Serializable 인 터 페 이 스 를 실현 한 후에 진정한 직렬 화 작업 은 JDK 에 의 해 이 루어 지기 때문이다.그 는 반 사 를 통 해 구성원 변 수 를 얻어 야 한다.반 사 된 성능 이 높 지 않 기 때문에 이런 직렬 화 방식 은 속도 가 느 리 기 때문이다.그러나 Parcelable 인 터 페 이 스 를 실현 할 때 우 리 는 이 인터페이스 에서 정 의 된 방법의 실현(writeToParcel 은 서열 화,createFromParcel 은 반 서열 화)을 제 공 했 기 때문에 반사 적 인 사용 을 피 할 수 있 기 때문에 이런 방식 은 속도 가 빠르다.
그렇다면 이 두 가지 방식 은 성능 차이 가 얼마나 될 까?다음은 해외 사이트 의 테스트 결과 입 니 다.Serializable 은 Parcelable 의 10 배 정도 걸 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.