什么是Android注释以及我们使用Android注释的原因?

时间:2015-09-09 14:23:55

标签: android annotations

我想了解Android Annotations,它是否可以在所有Android项目中使用?

如果正确,如何实现它。它有什么好的教程吗?

如果是错误的方式。什么是Android Annotations的绘制?

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:30)

Android Annotations 是一个注释驱动的框架,允许您简化应用程序中的代码并减少常见模式的样板,例如设置单击侦听器,强制执行ui /后台线程执行等。

你可能会有这样的事情:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView descriptionTextView = (TextView) findViewById(R.id.tv_description);
        final Button hideButton = (Button) findViewById(R.id.btn_hide);
        hideButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                descriptionTextView.setVisibility(View.INVISIBLE);
            }
        });
    }
}

对于这样的事情:

@EActivity(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {

    @ViewById(R.id.tv_description)
    TextView mDescriptionTextView;

    @Click(R.id.btn_hide)
    protected void onHideButtonClick() {
        mDescriptionTextView.setVisibility(View.INVISIBLE);
    }
}

工作原理

您注释了您的活动和组件,注释处理器然后生成类(在编译时),扩展您的活动和组件(即您的活动不能是最终的)默认情况下使用下划线后缀,所以如果您有{{1} },现在你还有一个MainActivity类。

这个新类包含一个编写良好的样板代码,可以执行注释指定的任何内容。

如何实施

我写了这篇关于如何集成Android注释的教程,甚至还包括了一个关于如何更新集成测试的示例check here

该教程在今天使用Android Studio~1.5.1时有效,它试图解释一下内部是如何工作的。

你应该使用它吗?

我想说如果你有一个中小型项目就好了。 这将使您的代码更易于阅读。但是,如果您的应用程序更大并且包含大量具有复杂活动/组件生命周期的导航流程,则可能会有一点难以实现,或者难以调试和理解错误如果没有适当地注释某些内容

由于Android Annotations如何运作,他们将自己嵌入生命周期并且这样做,您现在依赖于他们的生命周期(例如,如果您使用MainActivity_注释您的观点,那么您无法在@ViewById中引用它们,您需要创建一个方法并使用onCreate()对其进行注释,并且当执行此方法时,您的视图就可以使用了)。这不一定是个问题,你只需要很好地理解Android的行为以及Android Annotations行为。

总而言之,就像在任何图书馆中一样,如果你依赖它,那么你依赖它,所以你也可以非常彻底地理解它是如何工作的。您的项目现在取决于其他人的。

答案 1 :(得分:6)

我不使用Android Annotations,现在不再使用。当我使用这个库时,它是错误的,并使调试成为一场噩梦。另一个缺点是它降低了代码的可移植性。如果你单独在这个项目上工作,那么没关系,你就没有这个问题,但是当你在团队中工作时,你必须再考虑一下。

如果您想使用它,their site上有很多教程。

替代方案: 如果您希望减少代码量,同时使其易于使用和理解,我建议您使用Butter Knife库。我使用的很多,到目前为止还没有遇到任何错误。非常容易使用和阅读。

答案 2 :(得分:4)

Android Annotations是第三方库,它是一款适用于Android的工具。它具有依赖注入,线程处理等功能。我不建议使用它;它的马车,不稳定。在我目前的工作中,我正在开发一个项目,我的任务是删除Android Annotations。我建议使用Dagger 2,Butterknife和RxJava

答案 3 :(得分:4)

Android Annotations是一个通过使用@EActivity,@ ViewById,@ OnClick等属性或语言为我们“自动生成”代码的库。它旨在促进和减少编码时间。

“AndroidAnnotations是一个开源框架,可以加速Android开发。它可以处理管道,让您专注于真正重要的事情。通过简化代码,它便于维护。”

(此处的文档:https://github.com/excilys/androidannotations/wiki

但是......我们不使用它,我完全同意DDsix的答案。使用SOLID原则并编码应该在何时何地编码的内容...

答案 4 :(得分:2)

以下是Android Studio的示例。

  1. 使用“空活动”模板创建一个Android项目。
  2. 编辑project_root / build.gradle

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.5.0'
    ==>     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
    ==>     maven {
    ==>         url = 'https://oss.sonatype.org/content/repositories/snapshots'
    ==>     }
        }
    }
    
  3. 编辑app / build.gradle

    apply plugin: 'com.android.application'
    apply plugin: 'android-apt'  <============
    
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"
    
        defaultConfig {
            applicationId "com.just.myapplication"
            minSdkVersion 19
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.1.1'
    
    ==> apt "org.androidannotations:androidannotations:4.0-SNAPSHOT"
    ==> compile 'org.androidannotations:androidannotations-api:4.0-SNAPSHOT'
    }
    
  4. 在主布局activity_main.xml

    中添加TextView和Button

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Not Click Yet"
        android:id="@+id/textView"/>
    
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:id="@+id/button"
        android:text="Click"
        android:layout_below="@+id/textView" />
    

  5. 将活动名称更改为AndroidManifest.xml中的“MainActivity_”

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    ==> <activity android:name=".MainActivity_">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
    
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
    

  6. 现在,您的MainActivity.java可以简化如下

    package com.just.myapplication;
    
    import android.support.v7.app.AppCompatActivity;
    import android.widget.TextView;
    
    import org.androidannotations.annotations.Click;
    import org.androidannotations.annotations.EActivity;
    import org.androidannotations.annotations.ViewById;
    
    @EActivity (R.layout.activity_main)
    public class MainActivity extends AppCompatActivity {
    
        @ViewById(R.id.textView)
        TextView mText;
    
        @Click
        void button() {
            mText.setText("Button Clicked!");
        }
    }
    
  7. 尝试使用设备或模拟器运行它,看它有多简单。

相关问题