1. 전제
비즈니스는 종종 모든 이벤트 통계에 대처하기 위해 수행해야 할 수도, 가장 쉬운 방법은 각 클릭에 자신의 코드를 추가하는 것입니다, 또는 그의 견해는, 이들은 비즈니스 부부 관련된 전체 상속은 몇 가지 특별한 점 이외에, 너무 높은 대부분의 포인트는
점을 달성하기 위해 범용 방법이 될 수 있습니다, AOP의 컴파일하기 전에 사업에서 벗겨 측면과 직접 서버 또는 직접 PM 문서 스크립트 눈에 띄는 동적 읽기에서 전송도 점 데이터를 사용하여 점은 자동으로 분사 Gradle을 달성하기 위해
2. RBI
한. 통용 점
일반적으로 인터페이스와 관계가 있고, 우리는 공통 인터페이스를 달성 할 수있는 활성 단편은, 일반적인 방법으로 인터페이스 포인트, 이것은 일반적으로 다음의 기본 클래스 구현 될 수있는 현재의 포인트는 AOP 모듈을 해당 데이터
당신은 완전히 분리 할 심지어 반사의 방법으로 일반적인 타점 데이터를 얻을 수있는 경우
II. 특수 요소 포인트
예를 들어, 우리는 시간 등을 클릭, 목록에서 현재 요소, 또는 현재 요소의 이름의 위치를 알 필요가
여기에 바인딩 데이터 바인딩에 의해 기술 된 이벤트가, 당신이 setOnClickListener에서 인터페이스를 사용하는 경우, 다음 글로벌 사용 AOP를 줄일 수 일반적이다 있습니다
<텍스트 뷰 안드로이드 : layout_width = "wrap_content"안드로이드 : layout_height = "wrap_content" 안드로이드 : 텍스트 = "@ {module.name}" 응용 프로그램 : bindClickData = '@ { "이름 :"+ module.name + "위치 :"+ 위치} 로이드 : TEXTSIZE = "20sp" 로이드 :의 onclick = "@ {(뷰) -> click.onMainClick (모듈 뷰)}" 로이드 : 패딩 = "20dp"/>
응용 프로그램 : bindClickData의 주요 항목이, 자신의 일부 매개 변수 전달하는 사용자 정의 데이터 바인딩 이벤트이며,
당신이 날 목록에있는 항목의 주요 현재 이름과 위치를 통과 볼 수있는 곳은
공용 클래스 BindAppUtils { @BindingAdapter ( "bindClickData") 공공 정적 무효 bindClickData (보기보기, String 데이터) { Log.e ( "린", "bindData ="+ 데이터); view.setTag (R.id.snow_click_id 데이터); } }
이 view.setTag에 의해 정의 된 자기 바인딩 이벤트 우리가 타점 데이터를 볼 특별한 캐시를 넣어이다
안드로이드 : 온 클릭은 일반적인 클릭 이벤트의이다,
데이터 바인딩은 모든 이벤트의 generatedJava 디렉토리에 갈 것입니다 클릭
패키지 이름 .generated.callback.OnClickListener
@Before는 ( "실행 (com.lin.aopdemo.generated.callback.OnClickListener.onClick * (...))") 공공 무효 onCommonClick (joinpoint를 joinpoint를)가 발생하는 Throwable { 보기보기 = (뷰) joinPoint.getArgs () 0 ]; Log.e ( "LIN", "의 onclick ="+ joinPoint.getThis ()); 경우 (ClickInter instanceof를 view.getContext ()) { ClickModel.INSTANCE.doClick (뷰 ((ClickInter) view.getContext ()) getPageParam ().); } }
여기에 방법 섹션은 해당 클릭보기,이다, 여기 당신이 완전히 분리하려는 경우, 인터페이스의 일반적인 매개 변수를 물론 getPageParam 반사 ()를 획득 할 수 있으며, 직접 액세스 성능은 반사보다 더 나은 것
재미에서는, doClick (보기 :보기, m :지도 <문자열, 문자열>) { var에 데이터 = view.getTag (R.id.snow_click_id)와 같은 문자열 VAR지도 = mutableMapOf <문자열, 문자열> () map.putAll (m); 데이터 .split ( ",") {대해 forEach?. (it.contains ( ":")) 경우에 { map.put (it.split ( ":") [0] it.split ( ":") 1 ]) } } Log.e ( "LIN"map.toString ()) }
우리가 view.getTag에 의한 특수 데이터 전면 databing에 가서 얻는 특정한 방법을 클릭, 모든 타점을 완료하기 위해지도에 박제
돌아 가기 플랫폼 특정 통해 데이터가 자신을 정의 할 수 있습니다 잊지 통과
DETAILED 소스는 상부, 비교적 간단한 예에서 볼 수 연장이 아이디어의 특정 요구에 따라 할 수있다