2024年安卓最全结合实例分析Android MVP的实现,2024年最新b站hr面试

文末

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

【视频教程】

天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

.postDelayed(new Runnable() {
@Override
public void run() {
listener.onFinish(createPictures());
}
}, 2000);
}

private List createPictures() {
ArrayList pictures = new ArrayList<>();
for (int i = 0; i < pictureNames.length; i++) {
pictures.add(new Picture(pictureNames[i], pictureImages[i]));
}
return pictures;
}
}

大家看上面的代码,只有 loadPictures 是来自于接口的,为啥 createPictures 方法不写在接口里呢?主要是因为写在接口的方法是要在 P 中调用的。如果不需要外部调用,就没必要接口里面了。

V 的实现(只贴重要的代码):

public interface PictureView {
void showProgressBar();

void hideProgressBar();

void showMsg(String msg);

void showPictures(List pictures);
}

虽然 View  中只有 PictureView 一个类,但是从这个类可以对 view 要做的事一清二楚。

P 的实现(只贴重要的代码):

public class PicturePresenterImpl implements PicturePresenter, LoaderListener {

private PictureView mPictureView;
private PictureInteractor mInteractor;

public PicturePresenterImpl(PictureView pictureView) {
this.mPictureView = pictureView;
mInteractor = new PictureInteractorImpl();
}

@Override
public void onResume() {
mPictureView.showProgressBar();
mInteractor.loadPictures(this);
}

@Override
public void onDestroy() {
mPictureView = null;
}

@Override
public void onItemClick(int pos) {
mPictureView.showMsg(String.valueOf(pos));
}

@Override
public void onFinish(List pictures) {
mPictureView.hideProgressBar();
mPictureView.showPictures(pictures);
}
}

可以看出来,P 中其实就是对 M,V 的逻辑进行了封装,统一由其来掌控。

最后来讲讲 fragment,内部引入了 P 。主要是由于 P 无法控制生命周期,所以需要借用 fragment 的生命周期来对整个过程进行控制。

疑问?

大家看了上面的demo,不觉得在 fragment 中,即夹杂着 V, 又有 P,这样其实不利于维护,尤其是后期当 view 越来越多的时候,那时候,还要把 view 的初始化等等都写在 fragment 中嘛?所以接下去要对 fragment 内容进行瘦身。那怎么瘦身呢?具体请看下文。

改造

改造后的结构,只在 view 中新建了一个 BasePageView 来处理 view 的初始化和控制逻辑。

其代码具体如下:

public class BasePageView extends FrameLayout implements PictureView {

private RecyclerView mRecyclerView;
private ProgressBar mProgress;

private PictureAdapter mAdapter;
private PicturePresenter mPresenter;
private Context mContext;

/**

  • 构造函数。
    */
    public BasePageView(Context context){
    this(context, null);
    };

public BasePageView(Context context, AttributeSet attributeSet) {
this(context, attributeSet, 0);
}

public BasePageView(Context context, AttributeSet attributeSet, int defStyleAttr){
super(context, attributeSet, defStyleAttr);
init(context);
}

/**

  • 初始化
    */
    public void init(Context context) {
    mContext = context;
    inflate(mContext, R.layout.base_view_layout, this);
    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    mProgress = (ProgressBar) findViewById(R.id.progress_bar);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
    }

@Override
public void showProgressBar() {
mProgress.setVisibility(View.VISIBLE);
mRecyclerView.setVisibility(View.INVISIBLE);
}

@Override
public void hideProgressBar() {
mProgress.setVisibility(View.INVISIBLE);
mRecyclerView.setVisibility(View.VISIBLE);
}

@Override
public void showMsg(String msg) {
Toast.makeText(mContext, msg, Toast.LENGTH_LONG).show();
}

@Override
public void showPictures(List pictures) {
mAdapter = new PictureAdapter(pictures);
mAdapter.setRecyclerItemClickListener(new OnRecyclerItemClickListener() {
@Override
public void onItemClick(int pos) {
mPresenter.onItemClick(pos);
}
});
mRecyclerView.setAdapter(mAdapter);
}

}

这样当需要对视图进行更改的时候,只需要更改这个类就可以了,不用在跑到 fragment 中去了。

于此同时,fragment 也瘦身成功了:

尾声

开发是需要一定的基础的,我是08年开始进入Android这行的,在这期间经历了Android的鼎盛时期,和所谓的Android”凉了“。中间当然也有着,不可说的心酸,看着身边朋友,同事一个个转前端,换行业,其实当时我的心也有过犹豫,但是我还是坚持下来了,这次的疫情就是一个好的机会,大浪淘沙,优胜劣汰。再等等,说不定下一个黄金浪潮就被你等到了。

  • 330页 PDF Android核心笔记

  • 几十套阿里 、字节跳动、腾讯、华为、美团等公司2020年的面试题

  • PDF和思维脑图,包含知识脉络 + 诸多细节

  • Android进阶系统学习视频

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值