안드로이드 구성 요소 내, 구성 요소 간 통신 모듈의 문제점 분석
구성 요소 간의 통신
예를 들어fragment와fragment 간의 통신은 숙주activity를 간접적으로 사용해야 한다.주로 두 가지 방법이 있다.
그리고 두 번째 방식을 추천합니다.
EventBus
유명한 틀이 왜 유명해?바로 그가 표준 디자인 모델을 따르는 기초 위에서 까다로운 문제를 우아하게 해결했기 때문이다.https://github.com/greenrobot/EventBus
EventBus는 Android에 최적화된 게시/구독 이벤트 버스입니다.주요 기능은 Intent,Handler,BroadCast를 대체하여 Fragment,Activity,Service,선정 사이에서 메시지를 전달하는 것이다.장점은 비용이 적고 코드가 더욱 우아하다는 것이다.발송자와 수신자를 결합시킨다.
사용
public class FirstEvent {
private String mMsg;
public FirstEvent(String msg) {
// TODO Auto-generated constructor stub
mMsg = msg;
}
public String getMsg(){
return mMsg;
}
}
public class MainActivity extends Activity {
Button btn;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// EventBus
EventBus.getDefault().register(this);
btn = (Button) findViewById(R.id.btn_try);
tv = (TextView)findViewById(R.id.tv);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);// EventBus
}
}
public class SecondActivity extends Activity {
private Button btn_FirstEvent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btn_FirstEvent = (Button) findViewById(R.id.btn_first_event);
btn_FirstEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EventBus.getDefault().post(new FirstEvent("FirstEvent btn clicked"));
}
});
}
}
public class MainActivity extends Activity {
Button btn;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
btn = (Button) findViewById(R.id.btn_try);
tv = (TextView)findViewById(R.id.tv);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(getApplicationContext(),
SecondActivity.class);
startActivity(intent);
}
});
}
public void onEventMainThread(FirstEvent event) {
String msg = "onEventMainThread :" + event.getMsg();
Log.d("harvic", msg);
tv.setText(msg);
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
@Override
protected void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
상세하게 해석하다
게시/구독 시간 버스란 두 가지가 있는데 한 쪽이 발표하고 한 쪽이 관찰하고 받아들이는 것이다.
EventBus의 메시지 수신 메커니즘:
public void onEventMainThread(SecondEvent event) {
Log.d("harvic", "onEventMainThread :" + event.getMsg());
}
public void onEventBackgroundThread(SecondEvent event){
Log.d("harvic", "onEventBackground :" + event.getMsg());
}
public void onEventAsync(SecondEvent event){
Log.d("harvic", "onEventAsync :" + event.getMsg());
}
총결산
이벤트버스는 메시지를 보낼 때 intent,handler,broadcast의 조작을 간소화하고 통일시켰다.메시지를 받을 때 이벤트 처리를 어떻게 하는지 네 가지 방법으로 봉하여 사용합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.