前言
【BMI指数计算器V4.0】与【BMI指数计算器V3.0】实现的效果是一样的,不同的是在【BMI指数计算器V3.0】的基础上加入了Service层(服务),BroadcastReceiver(广播接收者),使得项目的架构较V3.0多了一层。之所以使用Service(服务),是为了让数据库这样的与界面无关的业务逻辑放到Service(服务)中去处理,这也正是Service(服务)所擅长的。我们知道Android 有四大组件,分别是Activity(活动),Service(服务),BroadcastReceiver(广播接收者)和ContentProvider(内容提供者)。而这四大组件各自所擅长的都不一样。
比如 :
(1)Activity擅长处理界面显示与界面交互工作;
(2)Service擅长处理与界面无关,专门在后台进程中执行的操作;
(3)BroadcastReceiver擅长接收系统广播以及Activity与Service之间的数据传递工作;
(4)ContentProvider擅长让不同应用程序间共享数据。
更新列表
1.项目架构增加了Service层和BroadcastReceiver2.数据模型Bmi类实现了一个标识接口 Serializable
3.其他的都与V3.0保持一致
项目架构图
技术预报
1.Sevice(服务组件技术)
2.BroadcastReceiver(广播接收者组件技术)
3.数据对象或集合在不同组件间的传递(需要让数据模型类实现标识接口 Serializable)
界面开发
V4.0主要是在V3.0的基础上将项目的架构换成用Service去操作SQLite数据库,得到数据后发广播,让BroadcastReceiver去接收,在界面方面并没有改动,如果对界面开发不清楚的朋友请参考V3.0。
功能开发
step1:数据模型层:com.kedi.bmi.model/Bmi.java
package com.kedi.bmi.model;
import java.io.Serializable;
/**
* 指数数据实体类(数据模型) 实现一个标识接口Serializable(代表Bmi可以持久化,可放入Intent在各组件之间传递)
*
* @author 科弟
*
*/
public class Bmi <span style="color:#ff0000;">implements Serializable</span> {
/**
*
*/
private static final long serialVersionUID = 1L;
// 唯一标识
private int id;
// 身高
private double heigth;
// 体重
private double weigth;
// 体重指数
private double bmiNum;
// 体重状态
private String bmiState;
// 体重状态图片名
private String stateIconId;
// 计算时间
private long calaTime;
/**
* 构造方法
*/
public Bmi() {
}
/**
* 构造方法
*
* @param id
* @param heigth
* @param weigth
* @param bmiNum
* @param bmiState
* @param stateIconId
* @param calaTime
*/
public Bmi(int id, double heigth, double weigth, double bmiNum,
String bmiState, String stateIconId, long calaTime) {
super();
this.id = id;
this.heigth = heigth;
this.weigth = weigth;
this.bmiNum = bmiNum;
this.bmiState = bmiState;
this.stateIconId = stateIconId;
this.calaTime = calaTime;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getHeigth() {
return heigth;
}
public void setHeigth(double heigth) {
this.heigth = heigth;
}
public double getWeigth() {
return weigth;
}
public void setWeigth(double weigth) {
this.weigth = weigth;
}
public double getBmiNum() {
return bmiNum;
}
public void setBmiNum(double bmiNum) {
this.bmiNum = bmiNum;
}
public String getBmiState() {
return bmiState;
}
public void setBmiState(String bmiState) {
this.bmiState = bmiState;
}
public String getStateIconId() {
return stateIconId;
}
public void setStateIconId(String stateIconId) {
this.stateIconId = stateIconId;
}
public long getCalaTime() {
return calaTime;
}
public void setCalaTime(long calaTime) {
this.calaTime = calaTime;
}
@Override
public String toString() {
return "Bmi [id=" + id + ", heigth=" + heigth + ", weigth=" + weigth
+ ", bmiNum=" + bmiNum + ", bmiState=" + bmiState
+ ", stateIconId=" + stateIconId + ", calaTime=" + calaTime
+ "]";
}
}
step2:Service(服务)层:com.kedi.bmi.service/DataService.java
<span style="font-size:14px;">package com.kedi.bmi.service;
import java.io.Serializable;
import java.util.List;
import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
import com.kedi.bmi.dao.BmiDao;
import com.kedi.bmi.model.Bmi;
/**
* 数据服务
*
* @author 科弟
* 数据服务:
(1)创建数据服务public class DataService extends Service ;
(2)编写数据服务逻辑(对数据库的增,删,改,查);
(3)在AndroidManifest.xml中注册数据服务DataService;
(4)在MainActivity的onCreate()方法中通过startSer