aidl

old/Basic 2010. 7. 6. 14:25
1. 인터페이스(aidl) 생성
2. 구현클래스 생성
3. 메니페스트에 적고 
4. 엑티비티에서 해당 클래스를가져와서
5. 구현된 함수를 사용.

의 순서로 진행됩니다.

사실 엑티비티 레벨이니 서비스 레벨이니 신경안써도 돼는 작은 어플에서는 샤용할일이 없을듯.


1. aidl
package hell.o;
interface IPlusItService {
int add(int a, int b);
}


2. impl class
package hell.o;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;

public class PlusItService extends Service {

@Override
public IBinder onBind(Intent intent) {
if (IPlusItService.class.getName().equals(intent.getAction())) {
return plusItServiceIf;
}
return null;
}

private IPlusItService.Stub plusItServiceIf = new IPlusItService.Stub() {
@Override
public int add(int a, int b) throws RemoteException {
return a + b;
}
};
}


3. manifest

        <service android:name="PlusItService">
<intent-filter>
<action android:name="hell.o.IPlusItService"></action>
</intent-filter>
</service>


4. class load
 
    private IPlusItService plusItServiceIf
먼저 서비스 인터페이스를 담을 변수를 선언
	Intent intent = new Intent(IPlusItService.class.getName());
bindService(intent, new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
plusItServiceIf = IPlusItService.Stub.asInterface(service);
}

@Override
public void onServiceDisconnected(ComponentName name) {
plusItServiceIf = null;
}
}, BIND_AUTO_CREATE);
온크리에이트에 넣을 내용. (상식이있는 인간이라면 ServiceConnection을 밖으로 빼겠지만 졸려죽겠는데 그런거없다능.)


5. use
	int sum = plusItServiceIf.add(a, b);
요거 한줄하려고 이고생을!

지금 생각해보니 평소하던데로
XxxService , XxxServiceImpl이라는 편이 차라리 읽기 편하지 싶음.
I를 앞에붙여서 인터페이스임을 표시하는게 어느동네 표기법이더라?

'old > Basic' 카테고리의 다른 글

Android Bitmap Object Resizing Tip  (0) 2010.07.06
Handler  (0) 2010.07.06
zygote & Dalvik VM  (0) 2010.07.06
안드로이드 HAL - RIL(Radio Interface Layer)  (0) 2010.07.06
안드로이드 초기화 (init 프로세스와 기타 서비스 등록)  (0) 2010.07.06
Posted by jazzlife
,