Reflections on Java Reflection
원문 : http://onjava.com/pub/a/onjava/2007/03/15/reflections-on-java-reflection.html
번역판 : http://www.hanb.co.kr/network/view.html?bi_id=1369
acquireContentProviderClient(Uri)
와 흡사하나, 대상 컨텐트 프로바이더의 안정성을 신뢰하지 않는 경우 사용한다. 이는 대상 컨텐트 프로바이더의 프로세스가 사라질 경우, 컨텐트 프로바이더에 의존된 프로세스들의 플랫폼 클린업 메카니즘을 해제 한다. 일반적으론, 한번 프로바이더를 얻으면 필요한 만큼 제약없이 사용 할 수 있으며, 프로세스가 백그라운드 상태여도 사라지지도 않는다고 가정 할 수 있다. 이 메소드를 사용 하면, 프로바이더와의 통신중 어떠한 오류가 발생 하더라도 나중에 재연결 할 수 있게, 반드시 close에 주의를 기울여야 한다. 특히, DeadObjectException을 잡아 컨텐트 프로바이더가 죽어버렸다는 걸 알 수 있는데, 이는 현재 ContentProviderClient 오브젝트가 유효하지 않으며, 이를 해제 해야 한다는 것을 나타낸다. 만일 프로바이더를 재시작해 새로운 작업을 수행하려 한다면, 새로 얻으면 된다.acquireContentProviderClient(String)
와 흡사 하나, 대상 컨텐트 프로바이더의 안정성을 신뢰하지 않는 경우 사용한다. 이는 대상 컨텐트 프로바이더의 프로세스가 사라질 경우, 컨텐트 프로바이더에 의존된 프로세스들의 플랫폼 클린업 메카니즘을 해제 한다. 일반적으론, 한번 프로바이더를 얻으면 필요한 만큼 제약없이 사용 할 수 있으며, 프로세스가 백그라운드 상태여도 사라지지도 않는다고 가정 할 수 있다. 이 메소드를 사용 하면, 프로바이더와의 통신중 어떠한 오류가 발생 하더라도 나중에 재연결 할 수 있게, 반드시 close에 주의를 기울여야 한다. 특히, DeadObjectException을 잡아 컨텐트 프로바이더가 죽어버렸다는 걸 알 수 있는데, 이는 현재 ContentProviderClient 오브젝트가 유효하지 않으며, 이를 해제 해야 한다는 것을 나타낸다. 만일 프로바이더를 재시작해 새로운 작업을 수행하려 한다면, 새로 얻으면 된다.Cursor
를 리턴 한다.uri | 컨텐트를 명시하기 위해 content:// 스키마를 사용하는 URI. |
---|---|
projection | 리턴받을 column의 리스트. NULL을 넣으면 모든 column을 리턴 하므로 비효율적임. |
selection | 어떤 row를 리턴 할지 SQL WHERE 구문(WHERE 자체는 제외)형식으로 선언한 필터. NULL을 넣으면 모든 주어진 URI의 모든 row를 리턴함. |
selectionArgs | 만일 selection에 ?를 사용 했다면, 순서대로 selectionArgs의 값들로 치환된다. 값들은 Strings으로 묶이게 된다. |
sortOrder | 각 row를 어떻게 나열할지 SQL ORDER BY 구문(ORDER BY 자체는 제외) 형식으로 지정. NULL을 넣으면 기본값인 "unordered"가 사용된다. |
cancellationSignal | 처리 중에 해당 작업을 취소시키기 위한 시그널로 없으면 null지정. 작업이 취소되면 쿼리가 수행된 후 OperationCanceledException 이 던져 진다. |
java.lang.Object | |
↳android.os.CancellationSignal |
Nesterd Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
CancellationSignal.OnCancelListener | 취소 후 호출될 리스너. |
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
취소 시그널을 생성하며, 처음엔 취소되지 않은 상태 입니다.
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
작업을 취소하고 취소 리스너에 알립니다.
| |||||||||||
작업이 취소되었다면 true를 반환합니다.
| |||||||||||
void |
취소되면 호출될 취소 리스너를 지정합니다.
| ||||||||||
작업이 취소되면
OperationCanceledException 을 던집니다.. |
[펼치기]
Inherited Methods
| |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class java.lang.Object |
cancel()
이 이미 호출 되었다면, 지정된 리스너도 즉시 호출됩니다. 이 메소드는 리스너가 제거된 뒤에는 호출되지 않음을 보장 합니다.listener | 취소 리스너, NULL값을 지정하면 현재 지정된 리스너를 제거함. |
---|
OperationCanceledException
을 던짐.OperationCanceledException | 작업이 취소됨. |
---|
<receiver android:name=".TestBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_EJECT" />
<action android:name="android.intent.action.MEDIA_BAD_REMOVAL" />
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.MEDIA_REMOVED" />
<action android:name="android.intent.action.MEDIA_UNMOUNTED" />
<data android:scheme="file"></data>
</intent-filter>
</receiver>
// 인텐트 필터 생성 IntentFilter filter = new IntentFilter(); filter.addAction("com.hermina.broadcast.TEST"); // 브로드케스트 리시버 등록 registerReceiver(reciever, filter);물론 reciever는 등록할 BroadcastReciever 이며
filter.addCategory filter.addDataType filter.addDataScheme
unregisterReceiver(reciever);
<activity android:name="Test" android:theme="@android:style/Theme.Translucent">물론 잘 동작 한다.
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="Translucent_Dialog" parent="@android:style/Theme.Holo.Light.Dialog.NoActionBar"> <item name="android:windowBackground">@android:color/transparent</item> </style> </resources>이미 themes.xml 파일이 있다면 style 항목만 추가 하면 되겠죠?
<item name="android:windowActionBar">false</item> <item name="android:windowNoTitle">true</item>테마가 적용된 투명한 새로운 테마를 생성하였으면 이를 액티비티에 적용해 줘야 한다.
<activity android:name=".TrasparentTestActivity" android:label="@string/app_name" android:theme="@style/Translucent_Dialog" >이렇게 하면 투명한 액티비티 생성 완료~
<provider android:name="TestContentProvider" android:authorities="com.hermina.testcontent"> </provider>
<provider android:name="TestContentProvider" android:authorities="com.hermina.testcontent" android:readPermission="com.hermina.permission.CP_READ" > </provider>
<uses-permission android:name="com.hermina.permission.CP_READ"/>
<receiver android:name=".NewPhotoReceiver">
<provider android:name="TestContentProvider" android:authorities="com.hermina.testcontent" android:readPermission=" xxx.xxxxxx.xxxxx " > </provider>
<uses-permission android:name=" xxx.xxxxxx.xxxxx "/>