好久没有更新博客了,这段时间里和我的小伙伴们(”乌索普“、”丁二爷“、”小娜“、‘小雯’‘)参加了一个大学生Android应用软件比赛,利用两个月的课余时间做了一款MFNote(多功能记事本)软件,中间的苦这里就不多说了,大家都懂得~~ 搞IT的熬夜写代码,相信那是每一个有志青年都必须经历的。。。哈哈!j_0058.gif


先来几张软件截图:

【移动开发】Android应用程序中实用的代码框架(一)_第1张图片【移动开发】Android应用程序中实用的代码框架(一)_第2张图片【移动开发】Android应用程序中实用的代码框架(一)_第3张图片


有兴趣的同学可以下载下来玩玩!软件下载地址:http://apk.hiapk.com/html/2013/10/1874574.html


接下来的几篇博客我将会逐一将整个项目中一些我认为比较好玩的地方分享给大家,当然如果大家下载了这款软件觉得有想要学习的东西,留言给我,我会将其抽取出来与大家分享!


ok! 转入正题,开始我们今天的内容:实用的代码框架。


说到代码框架,对于个人开发者来说,做一款简单的android应用其实也用不到那么多的条条框框,但是如果是一个团队的协作,共同写代码,那就得前期先将代码的框架搭建好,这样才能更好的进行团队分工和编写代码。

【移动开发】Android应用程序中实用的代码框架(一)_第4张图片

一、MainServices类:

主框架类: 统一接收任务消息,处理不同的任务


package com.zhf.android_framework01.logic;import java.util.ArrayList;import java.util.LinkedList;import com.zhf.android_framework01.model.Task;import com.zhf.android_framework01.ui.IActivity;import android.app.Activity;import android.app.Service;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;/** * 主框架类:     统一接收任务消息,处理不同的任务 * @author ZHF * */public class MainServices extends Service implements Runnable{                                                                                                                                                                                                                                                                       //  1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。//  2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。//  3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。    private static LinkedList tasks = new LinkedList();  //任务队列,记得移除remove    private static ArrayList activities = new ArrayList();  //存放需要返回数据的 View    private boolean isRun = false;                                                                                                                                                                                                                                                                           @Override    public void onCreate() {                                                                                                                                                                                                                                                                                   isRun = true;        Thread thread = new Thread(this);        thread.start();                                                                                                                                                                                                                                                                                   super.onCreate();    }                                                                                                                                                                                                                                                                           /**     * 向集合中添加Activity对象     * @param activity 需要向集合中添加的实例     */    public static void addActivity(Activity activity) {        activities.add(activity);    }                                                                                                                                                                                                                                                                           /**     * 向集合中添加任务     * @param task 任务实例     */    public static void newTask(Task task) {        tasks.add(task);    }                                                                                                                                                                                                                                                                           /**     * 线程不断检测tasks中的任务     */    @Override    public void run() {        while(isRun) {            Task task = null;            if(!tasks.isEmpty()) {                task = tasks.poll();                if(null != task) {                    doTask(task); //处理任务                }            }            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    /**     * 处理任务(重要)     * @param task  任务实体     */    private void doTask(Task task) {        Message msg = handler.obtainMessage();        msg.what = task.getTaskId(); //获取任务ID                                                                                                                                                                                                                                                                                   switch (msg.what) {        case Task.FIRST_LOGIN:            System.out.println("doTask---->>>first login!");            msg.obj = "第一次登录成功";  //传递处理完的数据            break;        default:            break;        }        handler.sendMessage(msg);    }                                                                                                                                                                                                                                                                           /**     * 处理器     */    private Handler handler = new Handler() {        public void handleMessage(android.os.Message msg) {            switch(msg.what) {            case Task.FIRST_LOGIN:  //登录                IActivity activity = (IActivity) getActivityByName("LoginActivity");                activity.refresh(msg.obj);                break;            //其他任务            }        }                                                                                                                                                                                                                                                                               };    /**     * 根据Activity的名字获取集合中对应的Activity     * @param string  Activity的名字     * @return     */    private Activity getActivityByName(String string) {        if(!activities.isEmpty()) {            for (Activity activity : activities) {                if(null != activity) {                    if(activity.getClass().getName().indexOf(string) > 0) { //为何不写!=-1,not subString,因为会忽略了单个字母的情况                        return activity;  //获取对应的Activity实例                    }                }            }        }        return null;    };                                                                                                                                                                                                                                                                           //遍历所有Activity并finish    public static void exit() {        for (Activity activity : activities) {            activity.finish();        }        System.exit(0);    }                                                                                                                                                                                                                                                                           @Override    public IBinder onBind(Intent intent) {        System.out.println("------->onBind");        return null;    }    @Override    public void onStart(Intent intent, int startId) {        System.out.println("------->onStart");        super.onStart(intent, startId);    }    @Override    public void onDestroy() {        System.out.println("------->onDestroy");        super.onDestroy();    }}

这里用到了服务,所以记得在AndroidManifest中注册:


二.IActivity接口


package com.zhf.android_framework01.ui;/** * 每个界面需要实现该接口,完成其中的抽象方法 * @author ZHF * */public interface IActivity {                                                                                                                                                                                                                                                                                                                                                                                                              /**初始化**/    public abstract void init();                                                                                                                                                                                                                                                                                                                                                                                                              /**刷新界面**/    public abstract void refresh(Object ...params);}


三.Task类

package com.zhf.android_framework01.model;import java.util.Map;/** * 任务实体: 任务的ID,任务参数taskParams * @author ZHF * */public class Task {                                                                                                                                                                                                                                                                                                                                                                           public static final int FIRST_LOGIN = 0; //登录任务                                                                                                                                                                                                                                                                                                                                                                           private int taskId; //任务ID    private Map taskParams; //任务参数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  public Task(int taskId, Map taskParams) {        this.taskId = taskId;        this.taskParams = taskParams;    }    public int getTaskId() {        return taskId;    }    public void setTaskId(int taskId) {        this.taskId = taskId;    }    public Map getTaskParams() {        return taskParams;    }    public void setTaskParams(Map taskParams) {        this.taskParams = taskParams;    }}


四.LoginActivity类

package com.zhf.android_framework01.ui;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.zhf.android_framework01.R;import com.zhf.android_framework01.logic.MainServices;import com.zhf.android_framework01.model.Task;/** * 登录界面: 测试框架是否运行正常 * @author ZHF * */public class LoginActivity extends Activity implements IActivity{                                                                                                                                                                                                                                                                         private TextView textView;    private Button btn_login; //登录    private Button btn_exit; //退出                                                                                                                                                                                                                                                                         private Intent service;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                                                                                                                                                                                                                                                                                 //启动软件界面后记得启动后台服务!        service = new Intent(this, MainServices.class);  //别忘了注册!        startService(service); //启动服务                                                                                                                                                                                                                                                                                 MainServices.addActivity(this); //将该Activity实例加入到框架中,便于最终软件的退出                                                                                                                                                                                                                                                                                 this.btn_login = (Button) this.findViewById(R.id.btn_login);        this.btn_login.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Task task = new Task(Task.FIRST_LOGIN,null); //生成任务                MainServices.newTask(task);            }        });        this.btn_exit = (Button) this.findViewById(R.id.btn_exit);        this.btn_exit.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                //停止服务                stopService(service);                Toast.makeText(LoginActivity.this, "后台服务已停止!", Toast.LENGTH_SHORT);                MainServices.exit();  //将所有的Activity结束掉            }        });        this.textView = (TextView) this.findViewById(R.id.tv_login);    }                                                                                                                                                                                                                                                                         @Override    public void init() {                                                                                                                                                                                                                                                                             }    @Override    public void refresh(Object... params) {        //接收传回的数据,刷新UI        this.textView.setText(params[0].toString());    }}


还有一个xml:

<?xml version="1.0" encoding="utf-8"?>        

效果图:

【移动开发】Android应用程序中实用的代码框架(一)_第5张图片------点击测试框架--------->【移动开发】Android应用程序中实用的代码框架(一)_第6张图片


ok! 这里我们就简单的将一款软件的代码框架搭建起来了。以后我们创建Activity时,只需要按照下面这几条模式来添加代码,就十分的方便了!


框架流程:


1.每次创建Activity需实现IActivity接口.

2.在onCreate()中将Activity添加到集合中。

3.每次要进行操作时,可生成一个新的Task,将其添加到任务集合中即可。

4.在主框架代码中根据任务的ID来调用方法处理任务事件--->处理完成之后将结果以obj的形式传递到Handler中----->利用多态调用对应的refresh()来对应传递数据,以达到刷新界面的效果。

5.退出程序时,可以调用主框架类MainServices中的exit()将所有的Activity关闭掉。(这里可以看一下前面的这篇博客:http://smallwoniu.blog.51cto.com/3911954/1248643)





更多相关文章

  1. 应用程序基础之01序论
  2. Android应用程序HelloWorld
  3. Android应用程序窗口View的创建过程
  4. 第三部分:Android 应用程序接口指南---第二节:UI---第五章 设置(Set
  5. Android输入法框架分析(1)-三大组件
  6. 我的Android NDK之旅(五),在Mac上用eclipse手动编写代码向android开
  7. Android 自定义View 解耦框架
  8. Android 应用程序发布流程注意事项(整理)
  9. android开源代码

随机推荐

  1. Android(安卓)View框架的draw机制
  2. [Android]aapt使用小结
  3. 面向切面编程AOP
  4. Android反挂钩技术-Java层
  5. 上中下布局,上下高度指定,中间自适应(左
  6. Android--如何将android studio项目转换
  7. Android——数据存储(四种方式之二)读写SD
  8. Android(安卓)Design Support Library -
  9. Android(安卓)学习笔记1
  10. Android(安卓)Studio 环境搭建、配置和基