728x90
반응형
SMALL
<예제 상황>
- MainActivity.java
- Aclass.java
1. MainActivity 에서 Aclass 있는 funA()를 호츨한다.
2. Aclass 에 있는 funB()를 호출한다.
3. MainActivity 에서 funC()를 호출한다.
*단 funB()는 10초후에 호출된다.
그럼 위의 상태는 현재 비동기식 상태라 출력하면
funA()
funC()
10초후
funB()
이렇게 나옴, 위를 해결하기 위해서 onActivityResult()도 활용하거나, 아예 클래스를 변경해서 Aclass 에서 funB() funC() 를 모두 생성해서 로직을 바꾼다던가
하는 방법 들이있다. 그런데 이 방법등을 사용하게 되면 기존 로직이 흐트러지거나, 이 로직으 위해 다른 로직이 복잡해 질수도 있다.
그래서 callback 함수를 만들어 활용하는것이 좋다.
[MainActivity.java]
public class MainActivity extends AppCompatActivity {
Aclass aclass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1. Aclass 인스턴스 생성
aclass = new Aclass(this);
//2. Aclass , funA() 를 호출한다.(->Aclass.java 이동)
aclass.funA();
//6. callback 리스너를 호출받는다.
aclass.setCallbackListener(new Aclass.AclassCallbackListener() {
@Override
public void aclassCallback() {
//7. funC()를 실행시켜준다. -끝-
funC();
}
});
}
public void funC(){
Log.d("yck","funC()");
}
}//class end
[Aclass.java]
public class Aclass {
AclassCallbackListener aclassListener;
Context context;
public Aclass(Context context) {
this.context = context;
}
//3.funA() 가 호출된다
public void funA(){
Log.d("yck","funA()");
//3. 3초 delay 가 걸린다.
delay();
}
public void delay() {
int delayTimeMils = 3000;//딜레이 3초
Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
//4. 3초 딜레이 후 funB()를 호출한다.
funB();
//5. MainActivity 에서 인스턴스 생성한 직접만든 callback리스너를 호출한다.(->MainActivity로 이동)
aclassListener.aclassCallback();
}
}, delayTimeMils);
}
public void funB(){
Log.d("yck","funB()");
}
//Aclass 에서 직접 만든 callback listener interface
interface AclassCallbackListener{
void aclassCallback();
}
public void setCallbackListener(AclassCallbackListener aclassListener){
this.aclassListener = aclassListener;
}
}//class end
'Android Study' 카테고리의 다른 글
Android Keystore 데이터 보안에 대한 테스트 (0) | 2020.02.25 |
---|---|
android viewBinding 방식(Java,kotlin) (0) | 2020.02.22 |
안드로이드 해상도 폴더별 dimens (0) | 2020.01.14 |
안드로이드 Background 상태 체크하기 (0) | 2019.12.18 |
현재 액티비티가 보여지고 있는것인지 확인하는 Activity 함수 (0) | 2019.12.18 |