文末
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!