android开发常用知识点详解
分类:
文章
•
2024-07-27 21:51:04
- 1.单列模式:我想很多开发者都知道单列模式是一种设计模式,而单列模式的作用是什么呐?很显然对于项目中我们经常使用的对象利用单列模式创建出来保证实例化一次,这样可以减少内存消耗,常见的使用场景有,数据库创建.网络请求.文件流等.那么什么是单列模式呐?单列模式有哪几种呐?
- (1)首先我们常用的单列模式有三种,懒汉式,饿汉式,双重锁式
- /简单懒汉式
- public class Singleton{
- private static Singleton singleton=null;
- //私有构造方法保证外部不能通过构造器来访问,
- private Singleton(){
- }
- public static Singleton getInstance(){
- if(singleton==null){
- singleton=new Singleton();
- return singleton;
- }
- return singleton;
- }
- }
- //同步法懒汉式
- public class Singleton{
- private static Singleton singleton=null;
- //私有构造方法保证外部不能通过构造器来访问,
- private Singleton(){
- }
- public static synchronized Singleton getInstance(){
- if(singleton==null){
- singleton=new Singleton();
- return singleton;
- }return singleton;
- }
- }
- //双重锁式这种方式执行效率比较高,而且也是最常用的一种方式
- public class Singleton{
- //私有构造方法保证外部不能通过构造器来访问,
- private Singleton(){
- }
- private static Singleton singleton=null;
- public static Singleton getInstance(){
- if(singleton==null){
- synchronized(Singleton.class){
- if(singleton==null){
- singleton=new Singleton();
- }
- }
- }
- return singleton;
- }
- }
- 另外值得注意一下,如果需要带参数的时候不要把参数放在构造方法里面
- public class Singleton{
- private String str;
- //私有构造方法保证外部不能通过构造器来访问,
- private Singleton(){
- }
- private static Singleton singleton=null;
- public static Singleton getInstance(String str){
- if(singleton==null){
- synchronized(Singleton.class){
- if(singleton==null){
- singleton=new Singleton();
- }
- }
- }
- singleton.str=str;
- return singleton;
- }
- }
- 说到这里常用的单列模式就基本完成了,说得不够详细或者不到位的请留言.
-
2.BroadcastReceiver广播:我们都知道广播是属于android的四大组件之一在我们项目中使用也非常广泛,广播有发送者与接受者,这两者都可以通过用户自定义完成,当然通常情况下我们只需要自定义接收者,发送广播由系统完成,那么怎么来定义广播接收者呐?首先你要知道广播接收者分:静态注册,动态注册两种
- (1)静态注册又叫常驻型广播这种广播通常我们在配置文件AndroidManifest.xml里面完成,然后创建一个继承BroadcastReceiver的类来接收以及处理广播.值得注意的是,静态注册的广播接收者它跟应用程序无关,也就是说当你应用程序关闭的时候,我们一样能接收到广播。这里我就不上代码了
- (2)动态注册又叫非常驻型广播,这种广播不用在配置文件里面注册,完成由代码完成,但是当我们应用程序退出时那么此时我们不会接收到广播了.
-
3.RecyclerView适配器的封装:首先我简单说下RecyclerView这个强大的控件吧,从android5.0开始就支持RecyclerView替换了以前的ListView了,RecyclerView性能远远强大于ListView,它支持横向,纵向,网格,瀑布流列表布局。这些都由LayoutManager这个类支撑的.大家有时间可以去看下,相信大家在做项目的时候用到列表控件的页面非常多吧,那么这么多列表难道我们都要创建一个适配然后重写一系列方法......没错我以前都是这么干的,但是当我想快速开发的时候,我发现我每次都做了很多重复的工作,写了很多重复的代码,于是乎我就想起了封装一个适配器,调用的时候仅仅需要实现几行代码就能完成,当然我做的这个封装适配器不完善,比如当item布局切换的时候呐这个我以后会跟进,好了废话就不多说了.直接上代码
- //适配器基类
- public class BaseAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
- private int layout;
- private Context mContext;
- private List<Object>list;
- private LayoutInflater layoutInflater;
- private View view;
- public BaseAdapter(int layout,Context context,List<Object>list){
- this.layout=layout;
- this.mContext=context;
- this.list=list;
- layoutInflater=LayoutInflater.from(mContext);
- }
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- view = layoutInflater.inflate(layout, parent, false);
- BaseViewHolder viewHolder = new BaseViewHolder(view,mContext);
- return viewHolder;
- }
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
- BaseViewHolder viewHolder=(BaseViewHolder)holder;
- bingData(viewholder,list,position);
- }
- public void bindData(viewholder,List<Object>list,int position)(){
- }
- @Override
- public int getItemCount() {
- return list.size();
- }
- //BaseViewHolder基类
- public class BaseViewHolder extends RecyclerView.ViewHolder{
- private View itemView;
- private Context mContext;
- public BaseViewHolder(View itemView,Context mContext){
- this.itemView=itemView;
- this.mContext=mContext
- }
- public void setText(int id,String txt){
- TextView textview=(TextView)itemView.fingViewById(id);
- textview.setText(txt);
- }
- public void setImages(int id,int resourseid){
- ImageView image=(ImageView).itemView.findViewById(id);
- image.setImageResource(resourseid);
- }
- }
- //这里就是列表的适配器了,需要继承BaseAdapter
- public class MyAdapter extends BaseAdapter{
- public MyAdapter(int layout, Context context, List<Object> list) {
super(layout, context, list);
}
- //重写父类BaseAdapter的方法
- @Override
public void BindData(BaseViewHolder viewHolder,List<Object>list,int position) {
super.BindData(viewHolder, object,position);
Object object=list.get(position);
-
//调用BaseViewHolder方法设置item控件的值
viewHolder.setText(R.id.item_address_name,object.toString());
}
- }
- //调用方式
- (1).MyAdapter adapter=new MyAdapter(layout,context,lsit);
- (2).rv.setLayoutManager(new LinearLayoutManager(this));
- (3).rv.setAdapter(adapter);
- 好了,简单的适配器的封装就基本上完成了,上述代码或者方法有疑问欢迎大家留言,手写这么多难免考虑不周全,另外item多种布局我这里就没加上了,我想改动应该不大,有兴趣的自己可以试试.
-
4.最后我想整理一下当前android开发比较主流的框架,也是深受开发者欢迎的Mvp+Retrofit+Rxjava+okhttp了,在mvp之前我相信大家听说过mvc吧,这里我就不过多详解mvc了,其实Mvp就是mvc的升级版,大家在开发中有时会发现activity的代码太复杂了,一个页面就要上千行代码来支撑,这样的话activity就会承受很多的压力,维护,修改起来也很困难,Mvp设计模式帮我们解决了这个问题,M-Model,V-View,P-Presenter,其中P层处理了V与M层的交互,由它来承担业务逻辑
- 简单来说,Mvp其实就是一种设计模式,它减少了v层的负担,由p层来承担,使代码易读,易维护,易修改通过一系列接口,类来实现的,既然是设计模式,那么具体怎么玩都是看自己的了,另外Retrofit+Rxjava+okhttp网络请求框架,这个非常强大的网络框架通过以okhttp为请求开始,retrofit为请求过程,rxjava来操作,一系列操作符可以解决循环,连续请求的繁琐过程。因为我也是才开始接粗Mvp这个设计模式,就自己实现了一下,若有不到之处请谅解,欢迎留言.
- 首先看下我的Mvp的架构


- 其中WatchFragmentOne就是下面的View层
- 其中的类名是随便取的一个首先看下Model中类的代码

- Presenter层
-

-



-

- presenter层的主要是网络请求,利用flatmap操作符连续请求,然后利用接口形式把请求后的数据传递给V层
- view层的代码

- 从view层可以看到当请求成功或失败后,在view层都可以得到相应的信息;Retrofit的封装我就不贴代码了,简单提示下用单列模式创建,好了这样一个简单的mvp+retrofit+rxjava+okhttp框架就形成了.第一次做这个框架可能会有不到之处,欢迎留言,谢谢大家.祝大家工作顺利,身体健康.
- 最后上面所有内容都是一点点手写而来的对于菜鸟级别的我,可能还有很多不完善,请大家谅解,再次谢谢大家
-
-