`
malong26
  • 浏览: 167045 次
  • 性别: 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  
能把代码发出来不

相关推荐

    mandala, 一个编写原生Android应用程序.zip

    mandala, 一个编写原生Android应用程序 Mandala Mandala是一个框架,用于在中编写Android原生应用程序,使用 Goandroid工具链。 你可以在桌面上开发。测试和运行你的应用程序,然后将它的部署到Android设备上。 它...

    Android程序设计基础

    第3章探讨用户界面,也就是大多数Android程序中最重要的部分。  致谢  我要感谢为本书成功出版做出贡献的许多人,包括审稿人Anthony Stevens、Gabor Paller、Fred Burke、Dianne Hackborn和Laurent Pontier,...

    Android插件框架Android-Plugin-Framework.zip

    具体public.xml如何编写,可参考PluginMain/res/values/public.xml 以及 PluginTest/res/values/public.xml俩个文件,它们是分别用来固定宿主程序和插件程序资源id的范围的。 4、插件apk的Context 构造一个...

    android-app-template:用作使用最新的Android框架功能编写Android应用程序的基础的模板

    这是用作使用最新框架功能编写Android应用程序的基础的模板。 特征 多模块项目设置 易于使用的基于多模块。 使图书馆始终保持最新状态 未来的工作 单元测试 使用Espresso进行UI测试 执照 Copyright 2021 Alejandro ...

    op-mate:使用kivy框架编写的android应用程序以操作mate桌面

    伴侣 使用kivy框架编写的android应用程序,用于操作Mate和Unity桌面。

    Android DataFramework数据库框架

    DataFramew是Android的SQLite数据库框架,在程序中,可以通过编写一个xml文件创建,修改,删除数据库记录!

    android多媒体框架

    Android-MediaPlayer上层应用程序使用JAVA语言编写,实现逻辑处理;JAVA程序通过调用底层媒体库来实现具体的音视频文件和网络视频播放; JAVA程序通过JNI接口实现对底层媒体库libmedia.so的调用; MediaPlayer在运行...

    Android操作系统概述

    Android会同一个核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用JAVA编写的。 开发者也完全可以访问核心应用程序所使用的API...

    android应用框架源代码

    你是否在用eclipse编写android程序时候 出现source not find这样的情况 这是android应用部分的全部源代码 下载后直接释放到sdk目录下 platform目录下的sources目录(新建) 即可看到所有代码 无须使用git和ubuntu...

    Android系统开发入门_胡章焱驱动的编写

    某公司的培训教材 一、在Android内核源代码工程(kernel)中编写硬件驱动程序.............................4 二、在Android系统中增加C...六、在Android系统中编写APP通过应用程序框架层访问硬件服务.................28

    Android应用开发揭秘pdf高清版

    3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户界面简介 4.1.2 事件处理 4.2 ...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    所有的应用程序都是使用 JAVA 语言编写的。 应用程序框架 开发人员也可以完全访问核心应用程序所使用的 API 框架。该应用程序的架构设计简化了组件的重用;任何 一个应用程序都可以发布它的功能块并且任何其它的应用...

    毕设作品 采用Qt框架编写(基于WIFI车间设备监测与控制系统的研究)的主程序.zip

    采用Qt框架编写,以嵌入式ARM Linux系统作为软件运行平台。 Qt技术是一套强大的跨平台应用程序开发框架,专注于使用C++语言来构建高性能、高可维护性的软件解决方案。自1991年首次推出以来,Qt因其卓越的跨平台能力...

    Android 自动化测试框架

     是Android SDK自带的测试工具,是一个命令行工具,可以运行在模拟器中或者实际设备中,它向系统发送伪随机的用户事件流(如按键输入,触摸屏输入,手势输入等),实现对正在开发的应用程序进行压力测试。...

    Android 4高级编程(第3版)源代码

     《Android 4高级编程(第3版)》由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4SDK开发移动应用程序的理想指南。本书见解深刻,帮助经验丰富的Android开发人员充分挖掘Android4的新特性的潜力...

    Android12系统资源目录分析树状图pdf(使用xmind思维导图软件绘画,导出pdf文件,此是压缩包文件,需解压)

    自己整理的Android12版本的系统资源目录分析,包括各个目录对应的分支 ...frameworks:应用程序框架,Android系统核心部分,由Java和C++编写.pdf packages:应用程序包.pdf system:底层文件系统库、应用和组件.pdf

    晟轩科技Android系统开发基础框架.zip

    Android 平台提供了丰富的功能和接口,开发人员可以使用 Java 或 Kotlin 等编程语言编写 Android 应用程序。Android 项目也可以是针对特定设备或特定需求进行自定义开发的软件解决方案。 以下是 Android 项目的一些...

    android系统原理及开发要点详解

     第5章“Android的Java虚拟机和Java环境”,这是介于本地和Java层之间的相关内容,主要介绍Android的Java虚拟机Dalvik的基本概念、Android Java程序的环境、JNI的使用方法,以及Java框架的启动流程等。  第6章...

    【JavaScript源代码】低门槛开发iOS、Android、小程序应用的前端框架详解.docx

    低门槛开发iOS、Android、小程序应用的前端框架详解  现如今跨平台开发技术已不是什么新鲜话题了,在市面上也有一些开源的框架可供选择,然而技术成熟、产品服务健全的平台并不多,其中也不乏推陈出新的框架值得...

    使用PHP开发Android应用程序技术介绍

    和苹果不一样,它对那些想将应用程序提交到iPhone App Store的开发人员有着严格的指导方针和要求,Google的Android平台非常开放,甚至还可以用PHP编写Android应用程序,Irontech创建了一个运行在Android上的PHP移植...

Global site tag (gtag.js) - Google Analytics