안드로이드 학습노트74_Android 콜백 함수가 트리거하는 몇 가지 방식으로 정적 대상을 방송합니다
6267 단어 안드로이드 학습
1. 예를 들어 로그인.만약 아래의 이 방법이 외부에서 호출된다면, 어떻게 Loginactivity에서 로그인 작업을 실행하고, 성공한 후에 리셋listener 인터페이스를 실행합니까?일반적인 클래스라면 구조 함수를 통해 감청 클래스의 대상을 전송하면 된다.다만 액티비티에서는 감청 대상을 전달할 수 없어 방송을 활용해 구현하는 방안을 검토하고 있다.
public void login(final LoginOnClickListener listener) {
Intent intent = new Intent(context, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
listener.handleLogin(true, "receiver .. BroadcastReceiver .. ");
}
};
IntentFilter intentFilter = new IntentFilter("android.intent.action.MAIN");
context.registerReceiver(mReceiver, intentFilter);
context.startActivity(intent);
}
2. Loginactivity 클래스에 로그인한 후에 브로드캐스트 알림을 보내서 로그인했습니다.
Intent intent = new Intent("android.intent.action.MAIN");
sendBroadcast(intent);
참조: http://buddie.iteye.com/blog/977352
2. 정적 대상을 통해:
프로젝트를 할 때 제3자가 호출한 SDK에 문제가 발생했습니다. 제 sdk에 로그인 방법이 있는데 로그인 방법에서 또 하나의 sdk에 있는 로그인 인터페이스를 시작합니다. 사용자가 로그인에 성공한 후에 로그인 방법이 바로 제3자에게 어떻게 통지해야 하는지.나중에 라디오가 생각났어요. 첫 번째 방식대로 할 수 있어요.
나중에 다른 사람의 코드에서 정적 대상을 사용하는 것을 보고 나는 다음과 같은 방식을 시도해 보았다.정적 대상은 클래스가 얼마나 많은 대상을 만들든지 상관없이 변하지 않기 때문이다.다음은 구체적인 실현이다.
public class SDKLibPlatform {
private Activity context;
private SDKLibPlatform() {
}
private static SDKLibPlatform platform = new SDKLibPlatform();
public static SDKLibPlatform getInstance() {
if (platform == null) {
return new SDKLibPlatform();
}
return platform;
}
public static Callback listener;
/**
*
*
* @param listener
*
*/
public void login(Callback callback) {
// listener
listener = callback;
Intent intent = new Intent(context, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// activity
context.startActivity(intent);
}
SDKLibPlatform.listener.handle(false, "login ....... ");
public interface Callback {
public void handle(boolean status, String message);
}
}
Loginactivity를 시작하면 사용자가 로그인에 성공하거나 실패하면listener 대상의handle 방법을 호출하여 제3자에게 알릴 수 있습니다.
if (code==1) { //
SDKLibPlatform.listener.handle(true, "login success ....... ");
}else {
SDKLibPlatform.listener.handle(false, "login false ....... ");
}
타사 호출 코드:
SDKLibPlatform.getInstance().login(new Callback(){
@Override
public void handle(boolean status,String message) {
System.out.println(status+" -====================> "+message);
}
});
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
안드로이드 개발의 사용자 정의 View Drawable을 통해 아이콘 그리기텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.