先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
正文
import android.os.Parcel;
import android.os.Parcelable;
//可序列化对象
public class Author implements Parcelable {
String name;
int age;
public Author(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
protected Author(Parcel in) {
name = in.readString();
age = in.readInt();
}
//实现方法
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
//实现方法
@Override
public int describeContents() {
return 0;
}
//创建Creator接口实例
public static final Creator CREATOR = new Creator() {
@Override
public Author createFromParcel(Parcel in) {
return new Author(in);
}
@Override
public Author[] newArray(int size) {
return new Author[size];
}
};
}
-
进行序列化,利用Intent进行传递
-
进行反序列化,利用key获取对象
-
MainActivity
代码不变,SecondActivity
代码只要把获取对象的方法由getSerializableExtra
改为getParcelableExtra
即可。
Json字符串
- 首先引入gson依赖,使其可以使用gson转换对象为json格式
compile ‘com.google.code.gson:gson:2.6.2’
-
创建对象,成员变量可以并推荐private
-
Book.class
package com.hnucm.androiddemo.Model;
//对象
public class Book {
private String name;
private Author author;
public Book(String name, Author author) {
this.name = name;
this.author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Author getAuthor() {
return author;
}
public void setAuthor(Author author) {
this.author = author;
}
}
- Author.class
package com.hnucm.androiddemo.Model;
//对象
public class Author {
private String name;
private int age;
public Author(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
-
将对象转换为json格式,使用Intent传递(序列化)
-
MainActivity
package com.hnucm.androiddemo.Controller;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.google.gson.Gson;
import com.hnucm.androiddemo.Model.Author;
import com.hnucm.androiddemo.Model.Book;
import com.hnucm.androiddemo.R;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建传递的对象
Author author = new Author(“刘伟”,35);
Book book = new Book(“Java设计模式”,author);
//采用Intent传递数据
//从当前界面传递到另一个界面,确定传递方向
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
//利用标志String传递对象,采用json格式传递
intent.putExtra(“book”,new Gson().toJson(book));
//执行,打开下一个界面
startActivity(intent);
}
});
}
}
-
将对象从json格式转换回对象(反序列化)
-
SecondActivity
package com.hnucm.androiddemo.Controller;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.gson.Gson;
import com.hnucm.androiddemo.Model.Book;
import com.hnucm.androiddemo.R;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//初始化显示控件
TextView textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//接收另一个界面传过来的对象
//根据key值保存传递过来的json字符串
String bookJson = getIntent().getStringExtra(“book”);
//将json字符串按照对象格式转换回对象
Book book = new Gson().fromJson(bookJson,Book.class);
textView.setText(“书名:” + book.getName());
Log.d(“作者”,book.getAuthor().getName());
}
});
}
}
三种方式的性能对比
- 转换为字符串的方式是最慢的。
- Serializable次之,Parcelable比Serializable快十倍,所以按照性能都是用Parcelable。
- 但是Parcelable中有大量重复代码,那么就要简化Parcelable的使用。
简化Parcelable
-
引入第三方库进行简化操作
-
常见的有
Parceler
、auto-parcel
、ParcelableCodeGenerator
、ParcelableGenerator
等等。
Parceler
注意事项:
- 对象类一定要有构造函数。
- 类的成员变量权限不为private。
- 添加依赖
implementation ‘org.parceler:parceler-api:1.1.12’
annotationProcessor ‘org.parceler:parceler:1.1.12’
-
添加注解,表示对象实现Parcelable接口,简化操作
-
Book.class
package com.hnucm.androiddemo.Model;
import org.parceler.Parcel;
//注解
@Parcel
//对象
public class Book {
//成员变量权限不能为private
String name;
Author author;
//一定要有构造方法
public Book(){
}
public Book(String name, Author author) {
this.name = name;
this.author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Author getAuthor() {
return author;
}
public void setAuthor(Author author) {
this.author = author;
}
}
- Author.class
package com.hnucm.androiddemo.Model;
import org.parceler.Parcel;
//注解
@Parcel
//对象
public class Author {
//成员变量权限不为private
String name;
int age;
//一定要有构造方法
public Author(){
}
public Author(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
-
使用Parcels.wrap包装对象进行传递
-
MainActivity
package com.hnucm.androiddemo.Controller;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcel;
import android.view.View;
import android.widget.Button;
import com.hnucm.androiddemo.Model.Author;
import com.hnucm.androiddemo.Model.Book;
import com.hnucm.androiddemo.R;
import org.parceler.Parcels;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建传递的对象
Author author = new Author(“刘伟”,35);
Book book = new Book(“Java设计模式”,author);
//采用Intent传递数据
//从当前界面传递到另一个界面,确定传递方向
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
//使用Parcels.wrap包装一个Parcelable对象,进行传递
intent.putExtra(“book”, Parcels.wrap(book));
//执行,打开下一个界面
startActivity(intent);
}
});
}
}
-
使用Parcels.unwrap恢复对象
-
SecondActivity
package com.hnucm.androiddemo.Controller;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.hnucm.androiddemo.Model.Book;
import com.hnucm.androiddemo.R;
import org.parceler.Parcels;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//初始化显示控件
TextView textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener() {
@Override
最后说一下我的学习路线
其实很简单就下面这张图,含概了Android所有需要学的知识点,一共8大板块:
- 架构师筑基必备技能
- Android框架体系架构(高级UI+FrameWork源码)
- 360°Androidapp全方位性能调优
- 设计思想解读开源框架
- NDK模块开发
- 移动架构师专题项目实战环节
- 移动架构师不可不学习微信小程序
- 混合开发的flutter
Android学习的资料
我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。
330页PDF Android学习核心笔记(内含上面8大板块)
Android学习的系统对应视频
总结
我希望通过我自己的学习方法来帮助大家去提升技术:
-
1、多看书、看源码和做项目,平时多种总结
-
2、不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理
-
3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习
-
4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- NDK模块开发
- 移动架构师专题项目实战环节
- 移动架构师不可不学习微信小程序
- 混合开发的flutter
[外链图片转存中…(img-DzpNGnW6-1713709233676)]
Android学习的资料
我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。
330页PDF Android学习核心笔记(内含上面8大板块)
[外链图片转存中…(img-jdMxQVao-1713709233677)]
Android学习的系统对应视频
总结
我希望通过我自己的学习方法来帮助大家去提升技术:
-
1、多看书、看源码和做项目,平时多种总结
-
2、不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理
-
3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习
-
4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-KJonujjS-1713709233677)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!