Android Mvp初探体验

超好用的Android MVP框架实战指南 MVP(Model-View-Presenter)模式是一种软件设计模式,它将应用程序分为三个核心部分:Model(模型)、View(视图)和Presenter(呈现器)。这种模式主要用于分离视图逻辑和业务逻辑,以提高代码的可测试性、可维护性和可复用性。在MVP架构中,View层扮演着至关重要的角色,因为它直接与用户进行交互。View层通常指的是Activity、Fragment或者自定义的视图,它们负责展示数据,并响应用户的操作事件。 阅读详情

Android Mvp初探体验

MVP的架构概念已经出现很长时间了,但是小的一直没有实际的应用的项目中,最近找到了新工作,头儿要求我们新项目必须采用mvp架构,并且要出一份架构设计文档,所以小的赶紧研究起来,正好与大家一起分享。

转载请注明出处,虽然也不会有人转```

mvp已经出现很久相信大家其实已经对mvp有了一些了解,所以我也就不贴一些非常专业的但是一下子看不懂的图了,mvp的原理其实用一句话概括的话就是:把所有的逻辑都放在presenter层里。

传统的mvc模式大家共同的认识基本上是xml布局是v,activity是c,这就导致了activity非常的臃肿,有的比较复杂的activity设置多达上千,几千行的也有,导致臃肿的原因,其实是xml布局不能完全的满足我们对布局的需求,非常多的时候我都需要在activity写逻辑的同时又要写布局相关的代码。

然后大牛们发现了这个问题,咋解决呢,很简单就是在拿出一个presenter层来专门处理逻辑,activity你不是没事儿就爱弄弄布局,摆弄摆弄控件吗?自己玩去吧,so:
原来是:
我们以为activity是c其实activity又是c又是v:
mvc的本质
但是mvp被提出以后,直接暴露了activity的本质,activity你就是v,别在这装了,我们找了帅小伙小p替代你,老老实实做的v吧,所以变成了这样:MVP的思想
这篇乱码七糟,瞎扯犊子博文写到这儿相信各位懂的都当笑话看了,没懂的还是没懂,so,我还有代码啊,哈哈,这你敢信。
我们用传统的mvc的方式做一个,登录页面,有清空输入框,有登陆然后本地做个延时模拟一下网络连接,showtime:
这是布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.ly.mvclogindemo.MainActivity">

    <ProgressBar
        android:id="@+id/progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:visibility="gone"
        />
    <EditText
        android:id="@+id/et_username"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入用户名"
      />
    <EditText
        android:id="@+id/et_pass"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入密码"
        />

    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="登录"
        />
    <Button
        android:id="@+id/btn_clear"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="清空"
        />

</LinearLayout>

so easy的一个布局文件两个输入框俩按钮一个progress,没啥说的
下面是mvc的代码:

package com.ly.mvclogindemo;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText et_username,et_pass;
    ProgressBar pbar;
    Handler handler;

{
    handler = new Handler();
}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init(){
        et_username = (EditText) findViewById(R.id.et_username);
        et_pass = (EditText) findViewById(R.id.et_pass);
        pbar = (ProgressBar) findViewById(R.id.progress);
        findViewById(R.id.btn_clear).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                et_username.setText("");
                et_pass.setText("");
            }
        });
        findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pbar.setVisibility(View.VISIBLE);
                String user = et_username.getText()+"";
                String pass = et_pass.getText()+"";
                if (!TextUtils.isEmpty(user) && user.equals("ly") && !TextUtils.isEmpty(pass) && pass.equals("123")) {
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            pbar.setVisibility(View.GONE);
                            Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                        }
                    }, 1000);
                }else{
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            pbar.setVisibility(View.GONE);
                            Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();

                        }
                    },1000);
                }
            }
        });
    }

}

这么简单的一个页面这么简单的逻辑和需求,相信很多同学都像我这样写一下就ok了,代码习惯比较好的同学可能会多搞出几个方法,做做优化基本也就那样,最后就是做完就是一个xml一个activity可能还有一个userBean这里我没写也没贴,userbean大家都懂(getUserName(),setUserName(),全是这玩意),可以看出来代码是稍微有点乱的,不排除我奔来写的就乱,但是相信很多同学在面对非常简单的需求的时候,在加上比较忙可能也会像我这样写一下。
然后来看mvp:
1,MVP的类会增加很多所以,我先贴一下目录
这里写图片描述
可以看出来多了很多类,具体都多了哪些呢,LoginViewInter,LoginPresenterInter,ILoginPresenter,以Base开头的类请大家自动无视一下3q。
我们逐个讲解一下:
1.首先讲解一下,我们发现多了好多接口,这些接口是干什么的,显然我们希望用接口实现m,v,p各层之间的通信,或者说联系,这样还不用暴露具体的实现。
2。LoginViewInter这个就是v的接口当然是由activity来实现它:

package com.ly.demo.view;

/**
 * Created by txw_pc on 16/11/17.
 */

public interface LoginViewInter {


    void clearUserAndPass();
    void login();
    void loginSucceed();
    void loginFailed();
    String getUsername();
    String getPass();
}

非常简单,定义了activity所有有关ui的可能出先的操作,但是也只限于有关ui的,那个login是指的点登陆按钮时ui的变化```
实现了这个接口的activity:

package com.ly.demo;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.ly.demo.presenter.ILoginPersenter;
import com.ly.demo.view.LoginViewInter;

public class MainActivity extends BaseActivity implements LoginViewInter{

    Button  clearbtn,loginbtn;
    EditText username_et,pass_et;
    ProgressBar pbar;
    ILoginPersenter iLoginPersenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        iLoginPersenter = new ILoginPersenter(this);
        initView();

}

    private void initView(){
        clearbtn = (Button) findViewById(R.id.login_clear_btn);
        loginbtn = (Button) findViewById(R.id.email_sign_in_button);
        username_et = (EditText) findViewById(R.id.login_username_et);
        pass_et = (EditText) findViewById(R.id.login_pass_et);
        pbar = (ProgressBar) findViewById(R.id.login_progress);
        clearbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                iLoginPersenter.clear();
            }
        });
        loginbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                iLoginPersenter.login();
            }
        });
    }

    @Override
    public void clearUserAndPass() {
        username_et.setText("");
        pass_et.setText("");
    }

    @Override
    public void login() {
        pbar.setVisibility(View.VISIBLE);
    }

    @Override
    public void loginSucceed() {
        pbar.setVisibility(View.GONE);
        Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void loginFailed() {
        pbar.setVisibility(View.GONE);
        Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();
    }

    @Override
    public String getUsername() {
        return username_et.getText()+"";
    }

    @Override
    public String getPass() {
        return pass_et.getText()+"";
    }


}

可以看出来感觉这个类变长了```但是也能感觉出来一下子就变的简单清晰了(没错mvc写那么乱就是为了对比 嘿嘿),我觉得这个也是mvp这么受推崇的原因之一就是可以让比较新手的同学,专注于方法的实现,而不是其它乱码七糟的东西

接着来搞这个LoginPresenterInter,有了之前的LoginViewInter这个应该就不难理解了,这个是presenter的接口,用来定义presenter会用到的逻辑,上代码:

package com.ly.demo.presenter;

/**
 * Created by txw_pc on 16/11/17.
 */

public interface LoginPresenterInter {


    void login();
    void clear();

}

简单到变态```就一个登陆的逻辑和一个清除输入框内容的逻辑简直不知道该说啥 我擦
接着来看他的实现类ILoginPresenter

package com.ly.demo.presenter;

import android.os.Handler;
import android.text.TextUtils;

import com.ly.demo.view.LoginViewInter;

/**
 * Created by ly on 16/11/17.
 * login逻辑
 */

public class ILoginPersenter extends BasePresenter implements LoginPresenterInter {
    User user;
    private LoginViewInter loginViewInter;

    private Handler handler;

    {
        handler = new Handler();
        user = new UserBean;
    }

    public ILoginPersenter(LoginViewInter loginview) {
        this.loginViewInter = loginview;
    }

    @Override
    public void login() {
        loginViewInter.login();
        String user = loginViewInter.getUsername();
        String pass = loginViewInter.getPass();
        user.setUserName(user);
        user.setPass(pass);
        if (!TextUtils.isEmpty(user) && user.equals("ly") && !TextUtils.isEmpty(pass) && pass.equals("123")) {
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    loginViewInter.loginSucceed();
                }
            }, 1000);
        }else{
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    loginViewInter.loginFailed();
                }
            },1000);
        }
    }

    @Override
    public void clear() {
        user.setUserName("");
        user.setPass("");
        loginViewInter.clearUserAndPass();
    }
}

可以看出来就是模拟了一下网络 然后做了一下判断,没有了,看上去也很简单。
代码贴完了,总结一下,mvp的方式做出来的程序确实是,肯上去可读性很好,而且很清晰,还可以帮助同学们专注于功能的开发上,避免逻辑和ui逻辑进行混杂。但是也有缺点,那就是会多出来很多的接口和类,而且用接口来回沟通的方式实话确实很不错,但是也有弊端,我感觉这样写的比较多的时候很容易因为来回改接口来回跳类而逻辑混乱(我感觉我会那样```,毕竟脑袋有点笨),但是较大型的项目使用mvp就可以很好的进行约束了,同样如果太小的项目也感觉没有必要这样搞,但是仁者见仁智者见智,说实话我自己写了一次感觉还真是挺好的。

基于imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流(多线程) 本文档是针对imx6ull平台`opencv`的图像采集、ffmpeg推流和Windows端拉流。首先创建一个线程`opencv`通过摄像头采集视频图像,接着再创建两个线程,其中一个线程获取采集的视频图像送给ffmpeg服务,另一个线程用于获取采集的视频图像并处理,处理完并在显示屏上显示,详细的流程请参看如下。 阅读详情

相关推荐

tanner2019安装教程

tanner2019安装教程 tanner安装包 软件由老师提供,但由于老师给的方法不知怎么回事无法使用就自己找了一些方法,本教程仅提供参考 链接:https://pan.baidu.com/s/1A2O6JuEF8YFbe8bPnD3J6w 提取码:ysif 复制这段内容后打开百度网盘手机App,操作更方便哦 安装过程 1.选择TannerTools_v2019.2-Win64.exe,进行安装。 2.选择安装产品 3.选择目标路径 4.确认安装 5.安装成功,退出。 获取许可过程 1.打开key压缩

weixin_47730560的博客 1万+

Android MVP之kotlin初体验

Android MVP之kotlin初体验MVP1.什么是MVP?2.相比较于MVC3.案例:登录模块 MVP 1.什么是MVP?         通俗的讲,M 代表数据层,V 代表视图层(页面activity/fragment),P桥接层,也叫做操控中心,操作M 获取数据,处理业务,然后通知V 层做相应展示操作。如图所示 2.相比较于MVC        

summerSpringwinter的博客 276

【PT+Arduino+OneNET基础教程1】PacketTracer中MCU芯片编程教程(零基础入门)

PacketTracer软件内MCU芯片编程入门 零基础

ChloeMax_的博客 9455

android MVP学习

https://www.jianshu.com/p/364f14c76874 Google官方MVP架构解析

王人冉的博客 323

OpenLayers源码解析1 Map.js

Map.js 父类:./PluggableMap/PluggableMap 引用:5个模块 ./renderer/Composite.js ./PluggableMap.js ./obj.js ./control.js(控件) ./interaction.js(交互) 主要功能:核心组件,渲染地图 必要参数: view layers target controls和interactions要是未指定,使用默认值 方法:createRenderer()? /** * @module ol/Map */ i

qq_45005996的博客 1898

【verilog语法详解:从入门到精通】

Verilog语法详解:从入门到精通 摘要:本文系统讲解Verilog硬件描述语言的核心语法与应用。Verilog作为数字电路设计标准,具有并行执行、硬件映射和层次化三大特点。文章从基础语法框架入手,详细介绍了模块定义、端口类型(input/output/inout)声明规范,以及线网型(wire)和寄存器型(reg)两种核心数据类型的区别与应用场景。重点讲解了组合逻辑(assign连续赋值)和时序逻辑(always块)的实现方式,包括阻塞赋值(=)与非阻塞赋值(<=)的关键差异。此外,还涵盖了参数(

m0_58476824的博客 4684

说说Android的MVP模式

安卓应用开发是一个看似容易,实则很难的一门苦活儿。上手容易,看几天Java,看看四大组件咋用,就能整出个不太难看的页面来。但是想要做好,却是很难。系统框架和系统组件封装了很多东西,开发者弄几个Activity,用LinearLayout把布局组合在一起,添加点事件监听,一个应用就成型了。红海竞争,不管多么复杂的UX和业务逻辑都是一个月快速上线,二周一个迭代,领导和产品早上改需求,晚上改设计,再加上

稀有猿诉 5650

Python 爬虫实战:知网论文数据爬取(题录 / 摘要 / 引用提取 + Excel 结构化)

在学术研究中,获取准确且全面的文献数据是至关重要的。知网(CNKI)作为国内最大的学术文献数据库,拥有海量的论文资源。通过 Python 爬虫技术,我们可以高效地从知网爬取论文数据,包括题录、摘要和引用信息,并将这些数据结构化存储到 Excel 文件中,方便后续的学术分析和研究。

yansideyucsdn的博客 1749

Android面试之项目架构MVP & MVVM

面试题:谈谈MVP和MVVM模式,你有在自己的项目中使用过吗? 好吧,其实问过很多面试者,结果说明MVP和MVVM模式并没有到妇孺皆知的境地。不过也好,这么一个简单的问题我们就可以很容易区分出面试者是否对Android开发有热情。 在解释MVP时,我们往往喜欢拿它和大众都比较熟悉的MVC进行比较。 MVC全名是Model--View--Controller,是模型(model)-视图(vi...

weixin_41828085的博客 1867

高通平台N4单路输入的720P相机预览

N4的一路720P Camera作为MIPI摄像头使用

llw21680的专栏 165

【制作100个unity游戏之22】3DRPG游戏开发07——其他详细的设计

我们会有有很多单例,如果每个单例都去写会很麻烦,所以我们定义泛型单例模式 Singleton,我们将所有的单例都继承这个泛型单例,就省略很多重复的工作定义一个GameManager类,继承Singleton,控制整个游戏的进度,比如如果主角死了,广播,游戏结束调用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2577

Android 之MVP模式

前言:如果童鞋对于接口回调,多态,泛型(这个很重要)不是特别熟练,或者不是特别了解,建议还是不要使用这种模式。先谢谢常规MVP练练手,等真正对这些知识能熟练掌握了再来学习MVP模式。这个架构用到了大量的接口,泛型。(基础很重要啊)使用MVP模式架构项目也有2个了。最新的项目原本想结合Dagger2去做(听说会让结构更加清晰)。不过在看了一上午Dagger2以后,我决定下个项目再集成,先把现有的MVP

sunxiaogang0214的博客 1101

PyTorch生成式人工智能(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解

生成对抗网络 (Generative Adversarial Network, GAN) 最早由 Ian Goodfellow 于 2014 年提出,其中生成器试图创建与真实样本无法区分的数据样本,而判别器则试图区分生成器生成的样本与真实样本。在本节中,我们将介绍 GAN 的理论基础。然后,介绍如何使用 PyTorch 从零开始构建 GAN,以便了解所有细节,深入理解 GAN 的内部工作原理,为后续讨论 GAN 的其他更高级内容奠定基础,比如生成高分辨率图像或逼真的音乐。

盼小辉丶的博客 1万+

Android MVP架构

MVP架构简介 MVP模式是由著名的MVC模式演变过来的,Android应用开发本身就是MVC模式,其中xml的布局是View层,Activity就相当于Controller。然而实际开发过程中,Activity经常不能纯粹的充当Controller,因为既要负责渲染view,又要处理业务逻辑,所以经常看到一个Activity有上千行代码,代码臃肿难懂,维护起来也非常吃力。这时候就需要简化Act

hello0370的专栏 824

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android架构之MVC、MVP、MVVM详解

什么是架构模式?什么是android架构模式? MVC、MVP、MVVM的本质区别是什么? 他们在android上的应用是怎么样的? 我们该如何选择? 弄清楚这几个问题,可以帮助我们更好地理解这三种架构模式,继而更好地运用它们。

一只修仙的猿 1229

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android kotlin架构,Android架构之MVP+Kotlin源码体验

原标题:Android架构之MVP+Kotlin源码体验MVP Kotlin官网地址 https://github.com/googlesamples/android-architecture/tree/dev-todo-mvp-kotlin/我们在官网中查看一下,发现给实际代码量的对比,比Java的MVP还少,看来Kotlin的语法糖优化得很不错。 从文件目录中简单的观察,和Todo-mvp的工...

weixin_39997194的博客 315

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android mvp mvvm ppt,Android三大项目架构MVC、MVP、MVVM使用体验

架构的使用感受了。由于今年写的Android项目都是商业的,没写个人项目,代码贴不了(可以说纯干聊,无干货- -)。子虚乌有的MVC(Model-View-Controller)为什么说Android MVC架构子虚乌有?MVC分层概念是在Java后台Spring框架里拿过来的。人家的Controller和View层代码确实是分离的。Android里面哪里分了,对此我斗胆做个猜测:在发明Andro...

weixin_36340672的博客 218

Android中的MVP模式及性能优化

一、MVC Model:模型,处理业务逻辑。 View:视图,呈现用户界面。 Controller:控制器,处理用户交互。 (图片来源:MVC图片)二、MVP Model:模型,处理业务逻辑。 View:视图,呈现用户界面。 Presenter:中间者,负责调控View和Model之间的交互。 (图片来源:《不要再给MVP中Prensenter写接

fjnu_se的博客 1109

Android MVP框架学习实践

        作为一名大三在读的学生,想着自己的大学生活只剩下一年了,有了些许紧迫感,于是就打算找一份实习工作来增加自己的项目实战经验。           想着互联网公司都基本都有现成的项目,实习的话最多也就是对原有的代码修改,增加功能?所以最后进了一家不大不小的外包公司,想体验一下一个商业项目从落地到成型的过程。进入公司以后,被分配到一个给国外发包方做的项目(我只是个实习生萌新啊,第一个项目...

reggie1996的博客 900

android mvp 开源项目,Android MVP 模式 项目初体验(一)

版权声明:本文出自veidy的博客,转载必须注明出处之前大家听得最多的是MVC,去年去中兴面试的时候被问到MVP,当时脑子里面第一个想到是NBA 詹姆士,哈哈哈。那是第一次听到MVP模式,后面也没注意,再后面又听到别人提起,于是百度了解了一下。什么是MVP?为什么要用MVP?怎么在Android上实现MVP?不多说了,我写了一个登录的Demo,直接拿来分析MVP在项目中的使用吧。大家先看看目录结构...

weixin_30315507的博客 240

安卓开发中MVP模式的应用(附实例)

随着安卓技术的发展,安卓UI界面给用户体验越来越好,头牌里面的翻拍布局,饿了么里面的浏览团购的界面等等,越发高大上,这样UI的任务越来越重,所以为了让视图View与业务数据处理更加细化,让View专注于处理界面布局和人机交互,同时让model只关注与数据处理,MVP框架(Model—View—Presenter)应用而生。 一、MVP框架一般包括以下几个模块: (1)、Model,负责

所谓简爱的博客 682

推荐项目:Android Studio MVP 模板

在 Android 开发中,Model-View-Presenter(MVP)架构模式是一种常见的设计模式,它有助于保持代码组织和可测试性。Benoît Létondor 创建的这个项目是一个预配置的 Android Studio 项目模板,可以直接用于新项目的起点,节省开发者为架构布局的时间。 ## 技术分析 此模板基于 Gradle 构建系统,使用了 AndroidX 库以确保最新的依赖和

gitblog_00090的博客 841

android的MVC、MVP、MVVM

在 Java 里,private和public属于访问修饰符,其作用是管控类、方法、变量等的访问权限。除此之外,Java 还有protected访问修饰符以及默认(不写修饰符)的访问级别。

weixin_42283818的博客 548

MVP框架——Android

个人用起来最舒服的MVP框架 框架使用 关于项目代码中的基础框架搭建 1.设置好你的Apiservice Apiservice是你一切的基础,如果你需要使用网络请求的话`. public interface IApi { //登陆注册 @POST Observable<ResponseBody> postMap(@Url String url, @QueryMap Map<String, String> map); //GET复用 @GET

MartinSZ的博客 436

Android MVP模式初体验

最近经常听到MVP模式的好,于是我去试着了解了下MVP并使用这种模式写了个demo。 MVP心得 MVP相比于MVC,多了好多类和接口,但逻辑看着很清晰。 V是Activity、Fragment这些View界面。使用接口实现的方式对V层的控制。(比如隐藏文本) M层即Model,我的理解就是我们常见的Bean类。也是使用接口实现的方式来对M进行操作。(比如Bean类中的set、get方法)

violetjack的专栏 1059

Mvp_Route:Android开发者的福音,轻量级MVP框架

Mvp_Route:Android开发者的福音,轻量级MVP框架 项目介绍 在Android开发的世界里,MVP(Model-View-Presenter)架构模式因其清晰的职责划分和良好的可维护性而备受开发者青睐。然而,搭建一个高效、易用的MVP框架并非易事。为此,我们隆重推出Mvp_Route,一款专为Android开发者打造的轻量级MVP框架。Mvp_Route不仅简化了MVP模式的实现,还...

gitblog_00899的博客 537
上一篇: 线程同步面试题,3个线程打印一个1-100的数组,要求P1=1,P2=2,P3=3,P1=4的形式
下一篇: android关闭其他app
random_7474
博客等级 码龄16年 4粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值