`
malong26
  • 浏览: 168680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用框架编写Android程序

阅读更多
AndroidAnnotations这个开源项目为android程序的编写提供了一个新的思路,他们自己称之为框架,我觉得很像struts2的注解方式,下面是这个项目在github上面的地址
https://github.com/excilys/androidannotations
下面的代码是一个例子
package com.googlecode.androidannotations.helloworldeclipse;

import java.util.Date;
import java.util.concurrent.TimeUnit;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.googlecode.androidannotations.annotations.Background;
import com.googlecode.androidannotations.annotations.Click;
import com.googlecode.androidannotations.annotations.EActivity;
import com.googlecode.androidannotations.annotations.LongClick;
import com.googlecode.androidannotations.annotations.SystemService;
import com.googlecode.androidannotations.annotations.Touch;
import com.googlecode.androidannotations.annotations.Transactional;
import com.googlecode.androidannotations.annotations.UiThread;
import com.googlecode.androidannotations.annotations.ViewById;
import com.googlecode.androidannotations.annotations.res.BooleanRes;
import com.googlecode.androidannotations.annotations.res.ColorRes;
import com.googlecode.androidannotations.annotations.res.StringRes;

@EActivity(R.layout.my_activity) //布局文件在这里声明,不用在setContentView
public class MyActivity extends Activity {

    @ViewById  //控件这样标注,由于是IOC模式,因此不需要自己实例化
    EditText myEditText;

    @ViewById(R.id.myTextView) //提供id来生成控件,如果不指定ID,默认以控件名进行查找,如上面的myEditText
    TextView textView;

    @StringRes(R.string.hello)  //资源
    String helloFormat;

    @ColorRes
    int androidColor;

    @BooleanRes
    boolean someBoolean;

    @SystemService
    NotificationManager notificationManager;

    @SystemService
    WindowManager windowManager;

    /**
     * AndroidAnnotations gracefully handles support for onBackPressed, whether
     * you use ECLAIR (2.0), or pre ECLAIR android version.
     */
    public void onBackPressed() {
        Toast.makeText(this, "Back key pressed!", Toast.LENGTH_SHORT).show();
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // windowManager should not be null
        windowManager.getDefaultDisplay();
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    }


    @Click //事件控制,可以以按钮的id作为方法名,同时支持的事件还有onLongClick,onTextChange等
    void myButtonClicked() {
        String name = myEditText.getText().toString();
        setProgressBarIndeterminateVisibility(true);
        someBackgroundWork(name, 5);
    }

    @Background //开启新线程后台运行,注意不要引用UI控件,而且返回值类型一定是void
    void someBackgroundWork(String name, long timeToDoSomeLongComputation) {
        try {
            TimeUnit.SECONDS.sleep(timeToDoSomeLongComputation);
        } catch (InterruptedException e) {
        }

        String message = String.format(helloFormat, name);

        updateUi(message, androidColor);

        showNotificationsDelayed();
    }

    @UiThread //UI线程
    void updateUi(String message, int color) {
        setProgressBarIndeterminateVisibility(false);
        textView.setText(message);
        textView.setTextColor(color);
    }

    @UiThread(delay=2000)  //可以设置延时时间,以毫秒为单位
    void showNotificationsDelayed() {
        Notification notification = new Notification(R.drawable.icon, "Hello !", 0);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(), 0);
        notification.setLatestEventInfo(getApplicationContext(), "My notification", "Hello World!", contentIntent);
        notificationManager.notify(1, notification);
    }

    @LongClick
    void startExtraActivity() {
        Intent intent = new Intent(this, ActivityWithExtra_.class);

        intent.putExtra(ActivityWithExtra.MY_DATE_EXTRA, new Date());
        intent.putExtra(ActivityWithExtra.MY_STRING_EXTRA, "hello !");
        intent.putExtra(ActivityWithExtra.MY_INT_EXTRA, 42);

        startActivity(intent);
    }

    @Click
    void startListActivity(View v) {
        startActivity(new Intent(this, MyListActivity_.class));
    }

    @Touch
    void myTextView(MotionEvent event) {
        Log.d("MyActivity", "myTextView was touched!");
    }

    @Transactional
    int transactionalMethod(SQLiteDatabase db, int someParam) {
        return 42;
    }

}

这个项目的好处是使用到了IOC模式,代码量小而且简洁,使程序员更多的关注于业务逻辑而不是页面,而且@Backgroud这个标签下开启的线程在线程池中管理。
类似的项目还有Android Binding,RoboGuice等,有兴趣可以看一下这个文章
CLEAN CODE IN ANDROID APPLICATIONS一个Spring gay写得,很不错哦~
http://blog.springsource.com/2011/08/26/clean-code-with-android/
1
4
分享到:
评论
4 楼 crackpot 2014-10-22  
真的挺方便的啊
3 楼 wangbin12315789 2013-08-02  
这个例子我试了试 结果会报错 提示windowManager.getDefaultDisplay();  这句空指针,而注释掉屏幕就黑了 什么也都不显示了。请问您遇到过这个情况吗?
或者有什么好的解决办法吗?
2 楼 malong26 2012-12-20  
q601180252 写道
能把代码发出来不

我记得github里面好像有demo
1 楼 q601180252 2012-12-19  
能把代码发出来不

相关推荐

    Android应用框架原理与程序设计(简中版).pdf

    《Android应用框架原理与程序设计》是一本深入探讨Android应用程序开发的专业书籍,主要针对的是Android应用框架的原理和设计方法。在Android系统中,应用框架是开发者构建应用程序的基础,它提供了一系列API和组件...

    Android系统结构和SDK使用;Android SDK的开发环境;Android应用程序的概述和框架;Android应用程序示例;Android应用程序的内容;Android的UI系统实现;视图组(ViewGroup)和布局(Layout)的使用

    ### Android系统结构与SDK使用详解 #### 一、Android系统介绍 ...总之,Android系统结构和SDK使用涉及到了从底层系统架构到应用程序开发的各个环节。开发者需要深入理解这些概念和技术,才能构建高质量的应用程序。

    Android编写驱动程序案例

    Android驱动程序的编写通常涉及Linux内核编程,因为Android基于Linux内核。本篇文章将深入探讨Android驱动程序的编写案例,帮助开发者理解驱动开发的基本流程和关键点。 首先,我们要明白驱动程序的分类。Android...

    Android小程序源代码集合

    3. 网络请求:Android小程序通常需要与服务器进行数据交换,使用HttpURLConnection或者第三方库如OkHttp进行网络请求,学习如何封装网络请求并处理响应,是网络编程的基础。 4. 用户交互:通过监听触摸事件、使用...

    Android mvvm 框架,最流行的mvvm demo

    项目krismileMvvm-master很可能是使用Kotlin编写的,因为Kotlin是目前Android开发的首选语言,且与MVVM架构搭配得非常默契。通过这个项目,开发者可以学习如何组织MVVM架构的应用程序,理解各个组件的作用,以及如何...

    Android 程序设计入门教学[上篇]

    4. **Java编程在Android中的应用**:教程通过详细的代码示例,教授初学者如何使用Java语言编写Android应用的逻辑。这涉及到如何处理用户输入,调用系统服务,以及实现数据存储等基本功能。 5. **解读预设的Java代码...

    Mina框架在android上的使用范例

    Mina(MINA,全称Java Minimal Asynchronous Network Library)是一个高效的、基于NIO(Non-blocking I/O)的网络应用程序框架,主要用于简化网络编程,尤其是TCP和UDP协议的开发。在Android平台上,由于系统资源...

    android快速开发框架

    在Android应用开发中,快速构建高效且用户友好的应用程序至关重要。"Android快速开发框架"就是为了满足这一需求而设计的,它包含了一系列预先封装好的组件和工具,帮助开发者节省时间,提高开发效率。以下是对该框架...

    Android程序测试(1)

    本篇主要介绍如何进行Android程序测试,我们将通过创建一个新的测试工程来对已有工程进行测试。首先,我们需要理解Android测试的基本概念和架构。 Android测试主要分为以下几个层次: 1. **单元测试(Unit Tests)...

    Android应用框架原理与程序设计(第三版)

    通过阅读《Android应用框架原理与程序设计(第三版)》,开发者不仅可以掌握Android应用开发的基本技能,还能深入了解其背后的运行机制,从而编写出高效、稳定、易维护的应用。无论你是初学者还是有经验的开发者,这...

    Android的应用程序框架与Eclipse开发应用程序入门

    《Android的应用程序框架与Eclipse开发应用程序入门》一书,为初学者提供了全面的指导,尤其适合在校大学生和想要涉足Android应用开发的程序员。本文将深入解析Android应用程序的基础框架,并以HelloActivity为例...

    android比较全的一个框架,快速开发必备

    这个压缩包文件"android比较全的一个框架,快速开发必备"提供了一个全面的解决方案,它包含了用于简化这些任务的各种组件,帮助开发者高效地构建Android应用程序。 首先,让我们关注AndBase。这是一个Android基础...

    《Android程序设计 第2版》PDF

    《Android程序设计 第2版》是一本深入探讨Android应用程序开发的专业书籍,对于想要掌握Android开发技术的程序员来说,是不可或缺的参考资料。这本书详尽地介绍了Android平台的基础知识、开发环境的搭建、应用生命...

    Android程序设计

    在Android程序设计中,我们还会接触到异步编程,例如使用AsyncTask、IntentService或者现代的LiveData和Coroutines处理耗时操作,防止阻塞主线程。 除此之外,Android提供了丰富的API来访问设备硬件,如相机、GPS、...

    Android应用框架原理与程序设计.zip

    通过深入学习《Android应用框架原理与程序设计》这本书,开发者可以全面了解Android系统的运作机制,从而编写出更加高效、稳定、安全的Android应用程序。结合实践,这些知识将为你的Android开发事业奠定坚实基础。

Global site tag (gtag.js) - Google Analytics