編輯:關於Android編程
在java中有annotation這個東西,因為平時用的也並不是太多,所以一直不是很理解,今天特意花了幾個小時看了下相關的知識點,熟悉了一下annotation的簡單用法。
annotation簡答直接用法如下:
一個自定義的annotation主要包括三部分:annotation的定義,annotation的使用,annotation的處理;事實上整個注解機制重點在於最後反射對注解值的使用。
第一步:定義如下:
package com.example.annotationtest.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface ContentView { int value(); }
@Target表明的是注解的類型,即類注解、方法注解、字段注解等
@Retention表明的是注解的使用范圍,即在源碼中的注解、在Runtime的注解等
@interface是一個自定義注解需要的標志,每個自定義的注解都會有相同的格式
第二步:使用的時候注意@Target中所定義的值(以上定義的是類的注解,所以可以按如下方法使用)
package com.example.annotationtest; import com.example.annotationtest.annotation.ContentView; import com.example.annotationtest.annotation.ViewUtils; import android.app.Activity; import android.os.Bundle; @ContentView(R.layout.activity_main) public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewUtils.inject(this); } }其中主要注意兩處,第一處是MainActivity之上的@ContentView(R.layout.activity_main)這裡代表使用ContentView的注解,第二處是ViewUtils.inject(this),這裡是第三步的功能,主要是執行該注解的過程。
第三步:最重要的一步,就是通過反射來執行該注解
package com.example.annotationtest.annotation; import android.app.Activity; import java.lang.reflect.Method; public class ViewUtils { public static void inject(Activity activity) { injectObject(activity); } private static void injectObject(Object handler) { Class handlerType = handler.getClass(); ContentView contentView = handlerType.getAnnotation(ContentView.class); if (contentView != null) { try { Method setContentViewMethod = handlerType.getMethod(setContentView, int.class); setContentViewMethod.invoke(handler, contentView.value()); } catch (Throwable e) { e.printStackTrace(); } } } }與普通的反射唯一的不同之處就是,多了從Annotation中拿到其value的一步。
ContentView contentView = handlerType.getAnnotation(ContentView.class);//這是拿到Annotation
contentView.value() //這是拿到在第一步中賦的值
最簡單的使用xml布局文件 Activity.javaList list = new ArrayList<>();list.add("
破解Android程序通常的方法是將apk文件利用ApkTool反編譯,生成Smali格式的反匯編代碼,然後閱讀Smali文件的代碼來理解程序的運行機制,找到
前言 Vitamio是我們團隊的誠意之作,除了要將VPlayer打造成Android最好的播放器,也要將Vitamio打造成Android最好的播放器組件。新版
前言在上篇文章詳細介紹了XML及其DOM、SAX、PULL解析方法和對比,那麼今天,我們來介紹同樣作為主流的數據交換格式-JSON!定義JavaScript Object