浅谈android 四大组件 以及mvc mvp

1 . android的四大组件
最常用的Android组件有四个,分别为 Activity 、 Service 、 BroadcastReceiver 以及
ContentProvider 。 Activity 负责用户界面, Service 在后台执行操作, BroadcastReceiver
监听系统事件, ContentProvider 存储应用程序数据。它们都提供了一个可供扩展的基类,以及供Android系统使用的清单节点。还有第五个组件,名为 Application ,虽然很少使用,但在某些情况下非常有用。

Activity 一般只处理用户界面相关的操作。虽然可以使用 AsyncTask 或者 Handler 在主线程外执行操作,但首选的做法是将耗时的任务委托给 Service ,且在单独的线程中执行,因为 Activity 的状态是由用户控制的,这导致在用户按下主屏幕按钮时取消正在运行的任务变得有点复杂。相反,开发者可以在 Service 中处理这些耗时的任务,而在 Activity 中关注用户界面。

另一个经常使用的组件是 Service 。基本上,任何不涉及用户界面的操作都应该使用Service 。需要记住的是所有组件都运行在同一个主线程里,所以要使用 Handler 或者AsyncTask 把一些比较耗时的操作放到一个单独的线程中运行。把这些操作移到 Service 中可以保证在用户按下后退或者主屏幕键时仍能完成这些任务。通过把耗时的操作放在 Service 中,开发者可以更容易地追踪这些操作的状态。建议每个任务都有一个对应的 Service 。可以使用一个 Service 来存储数据,另一个与在线Web服务进行通信。例如,如果要创建音乐播放器,可以用一个 Service 播放音乐,另一个Service 处理无关的其他任务。我们可以针对不同的操作使用不同的 Service ,这样可以分开启动和重启它们。使用多个 Service 比使用一个 Service 来处理所有的操作会更简单。

2 . mvc设计模式

在Android项目中,业务逻辑,数据处理等担任了Model(模型)角色,XML界面显示等担任了View(视图)角色,Activity担任了Contronller(控制器)角色。contronller(控制器)是一个中间桥梁的作用,通过接口通信来协同
View(视图)和Model(模型)工作,起到了两者之间的通信作用。

4.在MVC模式中我们发现,其实控制器Activity主要是起到解耦作用,将View视图和Model模型分离,虽然Activity起到交互作用,但是找Activity中有很多关于视图UI的显示代码,因此View视图和Activity控制器并不是完全分离的,也就是说一部分View视图和Contronller控制器Activity是绑定在一个类中的。

MVC的优点:
(1)耦合性低。所谓耦合性就是模块代码之间的关联程度。利用MVC框架使得View(视图)层和Model(模型)层可以很好的分离,这样就达到了解耦的目的,所以耦合性低,减少模块代码之间的相互影响。
(2)可扩展性好。由于耦合性低,添加需求,扩展代码就可以减少修改之前的代码,降低bug的出现率。
(3)模块职责划分明确。主要划分层M,V,C三个模块,利于代码的维护。

3 .mvp设计模式

MVP
是从经典的模式MVC演变而来它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter
(MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过
Controller。
在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。
在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,及View。所以,在MVC模型里,Model不依赖于View,但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。

这里写图片描述

1.建立bean

public class UserBean {  
     private String mFirstName;  
     private String mLastName;  

     public UserBean(String firstName, String lastName) {  
            this. mFirstName = firstName;  
            this. mLastName = lastName;  
     }  
     public String getFirstName() {  
            return mFirstName;  
     }  
     public String getLastName() {  
            return mLastName;  
     }  
}  

2.建立model(处理业务逻辑,这里指数据读写),先写接口,后写实现

public interface IUserModel {  
     void setID(int id);  
     void setFirstName(String firstName);    
     void setLastName(String lastName);  
     int getID();  
      // 通过id读取user信息,返回一个UserBean  
     UserBean load(int id);
}  

3 . 建立view(更新ui中的view状态),这里列出需要操作当前view的方法,也是接口

public interface IUserView {  
     int getID();  
     String getFristName();    
     String getLastName();    
     void setFirstName(String firstName);    
     void setLastName(String lastName);  
}  

4 . 建立presenter(主导器,通过iView和iModel接口操作model和view),activity可以把所有逻辑给presenter处理,这样java逻辑就从手机的activity中分离出来。

public class UserPresenter {  
     private IUserView mUserView;  
     private IUserModel mUserModel;    
     public UserPresenter(IUserView view) {  
            mUserView = view;  
            mUserModel = new UserModel();  
     }   
     public void saveUser( int id, String firstName, String lastName) {  
            mUserModel.setID(id);  
            mUserModel.setFirstName(firstName);  
            mUserModel.setLastName(lastName);  
     }   
     public void loadUser( int id) {  
           UserBean user = mUserModel.load(id);  
            // 通过调用IUserView的方法来更新显示  
            mUserView.setFirstName(user.getFirstName());
            mUserView.setLastName(user.getLastName());  
     }  
}  

5 . activity中实现iview接口,在其中操作view,实例化一个presenter变量。

public class MainActivity extends Activity implements OnClickListener,IUserView {  

     UserPresenter presenter;  
     EditText id,first,last;  
     @Override  
     protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
           setContentView(R.layout. activity_main);  

           findViewById(R.id. save).setOnClickListener( this);  
           findViewById(R.id. load).setOnClickListener( this);  
            id = (EditText) findViewById(R.id. id);  
            first = (EditText) findViewById(R.id. first);  
            last = (EditText) findViewById(R.id. last);  

            presenter = new UserPresenter( this);  
     }  

     @Override  
     public void onClick(View v) {  
            switch (v.getId()) {  
            case R.id. save:  
                 presenter.saveUser(getID(), getFristName(), getLastName());  
                 break;  
            case R.id. load:  
                 presenter.loadUser(getID());  
                 break;  
            default:  
                 break;  
           }  
     }   
     @Override  
     public int getID() {  
            return new Integer( id.getText().toString());  
     }    
     @Override  
     public String getFristName() {  
            return first.getText().toString();  
     }   
     @Override  
     public String getLastName() {  
            return last.getText().toString();  
     }    
     @Override  
     public void setFirstName(String firstName) {  
            first.setText(firstName);  
     }   
     @Override  
     public void setLastName(String lastName) {  
            last.setText(lastName);  
     }  

}  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值