Android studio--将项目生成为jar包
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/79537179 第一步:切换成Android 找到Gradle 下的app。 第二步: 屏蔽application,创建libaray,然后进行编译。 第三步:点击右上角 找到app 第四步:找到 libjarsForRelease 双击 可以生成jar包 第五步 :找到jar包生成的位置
项目的业务逻辑不断变更,需求也不断扩张,导致在原有代码基础上去处理也变得越来越繁琐,这时项目框架和代码规范就显得非常必要了。Google 在 GitHub 上的 Android Architecture Blueprints 提供了很多框架 Demo,现在对其中的 todo‑mvp 做一个简单的分析,并模仿写一个简单的 Demo。
一、MVP 基本结构
MVP 从更早的 MVC 框架演变过来,与 MVC 有一定的相似性:Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示。在 Android 上可以大大减轻 Activity 的负担,同时增加扩展性和耦合度。
View:负责绘制 UI 元素、与用户进行交互(在 Android 中体现为 Activity)
Model:负责存储、检索、操纵数据(有时也实现一个 Model interface 用来降低耦合)
Presenter:作为 View 与 Model 交互的中间纽带,处理与用户交互的负责逻辑
二、TodoMVP 框架结构
有如下几个步骤:
在 Activity 中初始化 Fragment 和 Presenter 的实例,并给 Fragment 设置 Presenter
Fragment 实现了 View 的接口,并拥有 Presenter 的引用,Fragment 的非 UI 操作都通过调用 Presenter 来实现,同时 Presenter 把处理好的结果通过回调 View 回传给 Fragment 显示
Presenter 拥有 View 的引用,具体的处理事情并回调 View 返回接口
正因为 UI 与具体实现相分离,使 Activity 只需要根据回传状态渲染 UI,Presenter 中也只用考虑处理逻辑,将处理好的状态告知 View 即可。在应用 UI 经常变更时会有非常大的优势。
三、参照写一个简单的 Demo
写一个简单的搜索 Demo,输入关键字,在点击搜索按钮时开始搜索,并将返回结果显示出来。
SearchContract 的实现,View 中包含搜索成功和搜索失败的回调,Presenter 中主要是搜索方法和 Activity 生命周期的方法。
public interface SearchContract {
interface View extends BaseView<SearchContract.Presenter> {
void onSearchSuccess(String result);
void onSearchFailure(String message);
}
interface Presenter extends BasePresenter {
void stop();
void startSearch(String searchKey);
}
}
在 MainActivity 中实现了 SearchContract.View,并创建 SearchPresenter 实例和初始化 UI。
public class MainActivity extends AppCompatActivity implements SearchContract.View {
private SearchContract.Presenter mPresenter;
private EditText etSearchKey;
private TextView tvResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new SearchPresenter(this, new DataManager());
etSearchKey = (EditText) findViewById(R.id.et_search_key);
tvResult = (TextView) findViewById(R.id.tv_result);
findViewById(R.id.btn_search).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String searchKey = etSearchKey.getText().toString();
if (TextUtils.isEmpty(searchKey)) {
showToast("搜索关键字不能为空!");
return;
}
mPresenter.startSearch(searchKey);
}
});
}
@Override
public void onResume() {
super.onResume();
mPresenter.start();
}
@Override
protected void onStop() {
super.onStop();
mPresenter.stop();
}
@Override
public void onSearchSuccess(String result) {
tvResult.setText(result);
}
@Override
public void onSearchFailure(String message) {
tvResult.setText(message);
}
@Override
public void setPresenter(SearchContract.Presenter presenter) {
mPresenter = presenter;
}
public void showToast(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
}
创建 SearchPresenter 实现 SearchContract.Presenter 接口,其中的搜索方法通过调用 Model 层的接口获取数据,并处理完结果后将状态回调给 View。
public class SearchPresenter implements SearchContract.Presenter {
private SearchContract.View searchView;
private CompositeSubscription mCompositeSubscription;
private DataManager dataManager;
private String mResult;
public SearchPresenter(SearchContract.View searchView, DataManager dataManager) {
this.searchView = searchView;
this.dataManager = dataManager;
this.searchView.setPresenter(this);
}
@Override
public void start() {
mCompositeSubscription = new CompositeSubscription();
}
@Override
public void stop() {
if (mCompositeSubscription.hasSubscriptions()) {
mCompositeSubscription.unsubscribe();
}
}
@Override
public void startSearch(String searchKey) {
mCompositeSubscription.add(dataManager.getSearchResult(searchKey)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onCompleted() {
if (mResult != null) {
searchView.onSearchSuccess(mResult);
}
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
searchView.onSearchFailure("请求失败!!!");
}
@Override
public void onNext(ResponseBody responseBody) {
if (responseBody != null) {
try {
mResult = responseBody.source().readUtf8();
} catch (IOException e) {
e.printStackTrace();
}
}
}
})
);
}
}
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。
马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。
Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。