1. 重庆云诚科技 > 互联网资讯 >

┏ android框架搭建教程 ┛android mvp框架搭建

导读在Android开发过程中搭建一个自己的应用框架有几个步骤本文最佳回答用户:【人生如此奢侈】 ,现在由重庆云诚科技小编为你讲解与【android框架搭建教程】的相关内容!答每个人对应...

今天我们来浅析有关┏ android框架搭建教程 ┛android mvp框架搭建,以下3个关于欧冠皇马的观点希望能帮助到您找到想要的答案。

在Android开发过程中搭建一个自己的应用框架有几个步骤

本文最佳回答用户:【人生如此奢侈】 ,现在由重庆云诚科技小编为你讲解与【android框架搭建教程】的相关内容!

每个人对应用框架的理解不相同,但是最终达到的效果应该是一样:

降低项目的复杂性

易扩展、易修改、可重用性强、可维护性强

职责单一,功能清晰

在android开发项目中,我们首先要考虑的是这个项目或者说这个产品的核心功能是什么。比如,图片处理和展示类app,我们更多考虑对大量图片的处理,防止OOM等等;如果是理财营销类软件,比如微众银行、同花顺这种大量采用H5页面的app,考虑需要对webview控件优化和Js交互框架的搭建;总之,框架是为了便于业务的展开,是为业务而服务的,框架的选择是和业务需求紧密相连的。

那么有没有一些通用的东西可以抽取呢?从自己的一些实践经验来回答题主的一些问题,权当抛砖引玉。

以上就是重庆云诚科技小编解答(人生如此奢侈)回答关于“在Android开发过程中搭建一个自己的应用框架有几个步骤”的答案,接下来继续为你详解体育用户(犹记い乌衣年少)解答“怎样搭建一个android开发框架”的一些相关解答,希望能解决你的问题!

在Android开发过程中搭建一个自己的应用框架有几个步骤

怎样搭建一个android开发框架

本文最佳回答用户:【犹记い乌衣年少】 ,现在由重庆云诚科技小编为你讲解与【android框架搭建教程】的相关内容!

搭建Android开发环境

准备工作:下载Eclipse、JDK、Android SDK、ADT插件

下载地址:Eclipse:

JDK:

Android SDK:

ADT:

1、安装和配置JAVA开发环境:

①把准备好的Eclipse和JDK安装到本机上(最好安装在全英文路径下),并给JDK配置环境变量,其中JDK的变量值为JDK安装路径的根目录,如我的为:D:\Program Files\Java\jdk1.7.0_02;

②打开命令提示符(cmd),输入java -version命令,显示如下图则说明JAVA环境变量已经配置好了。

2、安装ADT插件:

①打开已安装好的Eclipse,选择菜单栏上的“Help”->在弹出的下拉框中单击选择“Install new software.”;

②在新打开的对话框中我们完全可以直接在"Work with"中输入:在线安装ADT插件,但由于Google的服务器搭建在国外,所以通过这种方式安装起来会比较慢,而且可能会出现人品差死活装不上的情况,所以不推荐在线安装。

③我推荐直接通过下载好的ADT插件压缩包进行安装(此种方式可以在离线环境下进行)。具体步骤是:在新打开的对话框中点击“Add”按钮->在打开的对话框中点击“Archive”按钮选择之前已经下载好保存在本地硬盘的ADT插件压缩包,至于上面的“Name”可以随便取,这只是一个代号而已,没什么实际作用。

④在上一步中点击“Ok”按钮后我们会发现中间的空白处出现了两行复选框,单击"Select All"按钮选中所有的复选框,这步过后一路“Next”,需要“Accept”的就选中“Accept”,直到点击“Finish”结束,这样ADT插件就安装好了。整个过程需要的时间视机器性能而定。安装好ADT插件后,Eclipse的工具栏会出现一排Android的图标,如下图:

3、安装SDK:

①把下载好的Android SDK安装到本机上(最好安装在全英文路径下),并为Android SDK配置环境变量。Android SDK的环境变量值为SDK安装目录下的platform-tools文件夹和tools文件夹子目录路径,如我的分别为:E:\My Studying\Android\android-sdk\platform-tools、E:\My Studying\Android\android-sdk\tools,在变量值中,两个路径用逗号隔开。

②打开命令提示符(cmd),分别输入android -h和adb命令,显示如下图则说明Android SDK环境变量已经配置好了。

③打开Android SDK的安装目录,双击 "SDK Manager"->在打开的窗口中先选择你需要安装的SDK版本,其中“Status”表示该SDK包是否安装,如我选的是“Android2.2(API 8)”(我的之前已经安装过了,所以“Status”为“Installed”)->再点击“Install packages.”按钮,在弹出来的窗口中最好选“Accept All”这样才能安装你刚才选的所有的包->最后点“Install”按钮就开始安装了,整个过程会很慢,这需要你的耐心。

另外我们还可以通过在Eclipse上的工具栏中点击下图指示的图标打开“SDK Manager”然后进行安装,这样和上面的SDK安装方式一样,就不累述了。

④最后再选择Eclipes主菜单上的"Windows"->选择"preferrnces";

⑤在弹出来的对话框中选中左边栏的“Android”->通过右侧的“Browse.”按钮选择SDK的安装路径根目录->点击最下方的“Ok”按钮,这样SDK就在Eclipse上加载成功了。

4、创建Android模拟器(AVD):

①打开Eclipse->在Eclipse的工具栏上单击下图指示的图标打开“Android Virsual Device Manager”窗口;

②在“Android Virsual Device Manager”窗口单击“New”按钮->在弹出来的窗口中"Name"可以随便取;“Target”指模拟器的系统版本;“SD Card”的"size"是指手机存储卡的大小,只要你不在模拟器上装太多的应用,一般给个二三十MB就够了;“Skin”是指屏幕的分辨率大小,其中“Built in”是一般手机常用标准屏幕分辨率大小,而“Resolution”是自定义屏幕分辨率大小,具体做法,可以根据自身情况选择。->一切设置好后点击“Create AVD”,这时一个模拟器就创建好了。如果有必要,我们可以创建多个模拟器用于测试时使用。

附:Android模拟器型号以及其对应的分辨率大小:

Standard Width Height DAR Pixeis

HVGA 480 * 320 3:2 153,600

QVGA 320 * 240 4:3 76,800

WQVGA400 400 * 240 5:3 96,000

WQVGA432 432 * 240 9:5 103,680

WVGA800 800 * 480 5:3 384,000

WVGA852 854 * 480 409,920

至此为止,在Eclipse上就已经成功搭建Android开发环境了。

上文就是重庆云诚科技小编分享贡献者:(犹记い乌衣年少)回答的关于“怎样搭建一个android开发框架”的问题了,不知是否已经解决你的问题?如果没有,下一篇内容可能是你想要的答案,接下来继续阐述下文用户【若即若离花】分享的“如何利用mvp架构实现viewpager”的一些相关疑点做出分析与解答,如果能找到你的答案,可以关注本站。

如何利用mvp架构实现viewpager

本文最佳回答用户:【若即若离花】 ,现在由重庆云诚科技小编为你详解与【android框架搭建教程】的相关内容!

MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。

View

View通常来说就是有Activity、Fragment实现的,View会包含一个或多个Presenter的引用来满足视图的业务逻辑。View和Presenter的交互是双向的,即View层可以调用Presenter的逻辑方法,Presenter也可以控制View的显示。

Presenter

Presenter作为Model和View的桥梁,负责从Model拿到数据进行处理并返回给View。但Presenter和其他两层的沟通是通过接口协议进行的,所以每个Presenter中通常会包涵一个或多个接口协议。

Model 和MVC一样,作为数据仓库只负责对APP数据进行处理。 Android开发MVP模式实践中的示例将APP分为以下四层。

Entities:APP中的业务类。 Use Cases:负责从将Entities中的数据进行处理和包装。 Presenters:从Use

Cases获取处理好的数据,然后根据需求逻辑为UI提供合适的数据。 UI:从Presenters获取处理好的最终数据,和用户进行直接交互。

这四层设计的原则是代码调用只能从外圆向内圆扩展,内圆不能干预也不需关心外圆的功能逻辑,这符合MVP的思想,Use

Cases和Presenters将Entities和UI间隔分离,从而使Entities和UI只需关心自身逻辑,数据处理完全交给其他两层。

这里,有些同学可能会有疑问,说好的Presenters为什么会有Use

Cases出来搅局?其实这也是我选择这个工程当做示例的目的,看了好多MVP文章,都在讲Presenter如何通过接口协议和其他两层进行交互,但大都忽略了Presenter层自身的构架,因为仅仅套用MVP模式,虽然在一定程度上降低View的耦合度,但因为Presenter既要处理数据,又要结合需求控制UI交互,所以很可能出现Presenter逻辑的冗余。后文的示例工程在Presenter和Model之间包装了Use

Cases,将数据逻辑处理交给UseCases从而让Presenter更专心于UI交互。

NO1、新建VIew公共部分接口:

/**

 * Created by Bluesky on 2015/8/27.

 * MVP中V层的公共接口

 */

public interface IView {

public void showProgressPar();

public void hideProgressPar();

public void showError(Object o);

}

View继承公共IView接口

/**

 * Created by Bluesky on 2015/8/27.

 * 登录View接口

 */

public interface ILogin extends IView {

 public void showSuccess(Object o);

}

NO2、VIew的实现。也就是Activity实现ILogin接口:

/**

 *登录页面Activity

 */

public class MainActivity extends Activity implements ILogin {

private LoginPresenter mPresenter;

private User mUser;

private ProgressDialog mDialog;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mPresenter = new LoginPresenter(this);

    mUser = new User();

    initVIew();

}

private void initVIew() {

    final EditText pwd = (EditText) findViewById(R.id.pwd);

    final EditText name = (EditText) findViewById(R.id.name);

    Button loginBtn= (Button) findViewById(R.id.login_btn);

    loginBtn.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            mUser.setName(name.getText().toString());

            mUser.setPassword(pwd.getText().toString());

            mPresenter.login(mUser);

        }

    });

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.

    getMenuInflater().inflate(R.menu.menu_main, menu);

    return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

    // Handle action bar item clicks here. The action bar will

    // automatically handle clicks on the Home/Up button, so long

    // as you specify a parent activity in AndroidManifest.xml.

    int id = item.getItemId();

    //noinspection SimplifiableIfStatement

    if (id == R.id.action_settings) {

        return true;

    }

    return super.onOptionsItemSelected(item);

}

@Override

public void showSuccess(Object o) {

    User user= (User) o;

   Toast.makeText(this,"登录成功信息:"+user.getName()+" /"+user.getPassword(),Toast.LENGTH_LONG).show();

}

@Override

public void showProgressPar() {

    mDialog = new ProgressDialog(MainActivity.this);

    mDialog.setMessage("正在加载.");

    mDialog.show();

}

@Override

public void hideProgressPar() {

    mDialog.hide();

}

@Override

public void showError(Object o) {

    Toast.makeText(this,"异常:"+((Exception)o).getMessage(),Toast.LENGTH_LONG).show();

}

}

activity的xml布局:

<LinearLayout xmlns:android=";

  xmlns:tools=";

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:orientation="vertical"

  android:paddingBottom="@dimen/activity_vertical_margin"

  android:paddingLeft="@dimen/activity_horizontal_margin"

  android:paddingRight="@dimen/activity_horizontal_margin"

  android:paddingTop="@dimen/activity_vertical_margin"

  tools:context=".MainActivity"

>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/hello_world"/>

<EditText

android:id="@+id/name"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="请输入用户名"

/>

<EditText

android:id="@+id/pwd"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="请输入密码"

/>

<Button

android:id="@+id/login_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="登录"/>

</LinearLayout>

No3、新建LoginPresenter。我们面向接口编程,所以,新建一个Presenter接口,在该Demo是没有什么方法,这是为了可扩展性考虑。 presenter接口

/**

 * Created by Bluesky on 2015/8/27.

 * MVP中P层

 */

public interface Presenter {

}

登录presenter实现presenter接口,在这里进行View和Model层桥梁连接,进行业务调度,起到指挥作用

/**

 * Created by Bluesky on 2015/8/27.

 */

public class LoginPresenter implements Presenter {

private ILogin mLoginView;

private ILoginBiz mLoginBiz;

private Handler mHandler = new Handler();

public LoginPresenter(ILogin mLoginView) {

    this.mLoginView = mLoginView;

    this.mLoginBiz = new LoginBizImpl();

}

/**

 * 登录

 *

 * @param o

 */

public void login(Object o) {

    mLoginView.showProgressPar();

    mLoginBiz.login(o, new Listener() {

        @Override

        public void complete() {

            mHandler.post(new Runnable() {

                @Override

                public void run() {

                    mLoginView.hideProgressPar();

                }

            });

        }

        @Override

        public void onSuccess(final Object o) {

            mHandler.post(new Runnable() {

                @Override

                public void run() {

                    mLoginView.showSuccess(o);

                }

            });

        }

        @Override

        public void onFailed(final Exception e) {

            mHandler.post(new Runnable() {

                @Override

                public void run() {

                    mLoginView.showError(e);

                }

            });

        }

    });

}

}

No4、Model层进行业务逻辑处理。新建model层接口,然后实现业务逻辑处理,做异步处理及子线程和主线程通讯。 model接口:

/**

 * Created by Bluesky on 2015/8/27.

 */

public interface ILoginBiz {

public void login(Object o,Listener listener);

}

model实现:

/**

 * Created by Bluesky on 2015/8/27.

 */

public class LoginBizImpl implements ILoginBiz {

@Override

public void login(Object o, final Listener listener) {

final User user = (User) o;

new Thread(new Runnable() {

@Override

public void run() {

try {

Thread.sleep(2 * 1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

listener.complete();

if (user.getName().equals(user.getPassword())) {//成功

listener.onSuccess(user);

} else {//失败

listener.onFailed(new Exception("运行异常."));

}

}

}).start();

}

}

实体类:

/**

 * Created by Bluesky on 2015/8/27.

 */

public class User implements Serializable {

private String name;

private String password;

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

回调接口:

/**

 * Created by Bluesky on 2015/8/27.

 */

public interface Listener {

public void complete();

public void onSuccess(Object o);

public void onFailed(Exception e);

}

今天的内容先分享到这里了,读完本文《┏ android框架搭建教程 ┛android mvp框架搭建》之后,是否是您想找的答案呢?想要了解更多,敬请关注www.cqycseo.com,您的关注是给小编最大的鼓励。

推荐文章:

  • 膜的组词和部首,膜的组词和拼音是什么
  • 亲字组词100个 亲字的组词有
  • 酬谢是什么意思,定当酬谢是什么意思
  • 异的组词和部首,株的组词和部首
  • 箭组词和拼音 耸组词和拼音部首
  • 有志不在年高的意思-有志不在年高的意思雨来表达了
  • 繁衍的意思 繁衍的意思简单解释
  • 彤组词,胀组词和拼音
  • 血泊的拼音 泊的拼音
  • 螺组词拼音 螺的组词和拼音
  • 本文由网上采集发布,不代表我们立场,转载联系作者并注明出处:https://www.cqycseo.com/zixun/2967.html

    联系我们