今天我们来浅析有关┏ android框架搭建教程 ┛android mvp框架搭建,以下3个关于欧冠皇马的观点希望能帮助到您找到想要的答案。
在Android开发过程中搭建一个自己的应用框架有几个步骤
本文最佳回答用户:【人生如此奢侈】 ,现在由重庆云诚科技小编为你讲解与【android框架搭建教程】的相关内容!
答每个人对应用框架的理解不相同,但是最终达到的效果应该是一样:
降低项目的复杂性
易扩展、易修改、可重用性强、可维护性强
职责单一,功能清晰
在android开发项目中,我们首先要考虑的是这个项目或者说这个产品的核心功能是什么。比如,图片处理和展示类app,我们更多考虑对大量图片的处理,防止OOM等等;如果是理财营销类软件,比如微众银行、同花顺这种大量采用H5页面的app,考虑需要对webview控件优化和Js交互框架的搭建;总之,框架是为了便于业务的展开,是为业务而服务的,框架的选择是和业务需求紧密相连的。
那么有没有一些通用的东西可以抽取呢?从自己的一些实践经验来回答题主的一些问题,权当抛砖引玉。
以上就是重庆云诚科技小编解答(人生如此奢侈)回答关于“在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,您的关注是给小编最大的鼓励。
推荐文章:
本文由网上采集发布,不代表我们立场,转载联系作者并注明出处:https://www.cqycseo.com/zixun/2967.html
