Android核心知识点
面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验。
下面这份PDF是我翻阅了差不多3个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点,全部都是精华中的精华,我能面试到现在2-2资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。
不管是Android基础还是Java基础以及常见的数据结构,这些是无原则地必须要熟练掌握的,尤其是非计算机专业的同学,面试官一上来肯定是问你基础,要是基础表现不好很容易被扣上基础不扎实的帽子,常见的就那些,只要你平时认真思考过基本上面试是没太大问题的。
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create());
public S createService(Class serviceClass) {
Retrofit retrofit = builder.client(client).build();
return retrofit.create(serviceClass);
}
}
NetworkUtils
public class NetworkUtils {
public static final int NETWORK_NO = -1; // no network
public static final int NETWORK_WIFI = 1; // wifi network
public static final int NETWORK_2G = 2; // “2G” networks
public static final int NETWORK_3G = 3; // “3G” networks
public static final int NETWORK_4G = 4; // “4G” networks
public static final int NETWORK_UNKNOWN = 5; // unknown network
private static final int NETWORK_TYPE_GSM = 16;
private static final int NETWORK_TYPE_TD_SCDMA = 17;
private static final int NETWORK_TYPE_IWLAN = 18;
/**
-
打开网络设置界面
-
3.0以下打开设置界面
-
@param context 上下文
*/
public static void openWirelessSettings(Context context) {
if (android.os.Build.VERSION.SDK_INT > 10) {
context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
} else {
context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
}
}
/**
-
获取活动网络信息
-
@param context 上下文
-
@return NetworkInfo
*/
private static NetworkInfo getActiveNetworkInfo(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo();
}
/**
-
判断网络是否可用
-
需添加权限 {@code }
-
@param context 上下文
-
@return {@code true}: 可用
{@code false}: 不可用
*/
public static boolean isAvailable(Context context) {
NetworkInfo info = getActiveNetworkInfo(context);
return info != null && info.isAvailable();
}
/**
-
判断网络是否连接
-
需添加权限 {@code }
-
@param context 上下文
-
@return {@code true}: 是
{@code false}: 否
*/
public static boolean isConnected(Context context) {
NetworkInfo info = getActiveNetworkInfo(context);
return info != null && info.isConnected();
}
/**
-
判断网络是否是4G
-
需添加权限 {@code }
-
@param context 上下文
-
@return {@code true}: 是
{@code false}: 不是
*/
public static boolean is4G(Context context) {
NetworkInfo info = getActiveNetworkInfo(context);
return info != null && info.isAvailable() && info.getSubtype() == TelephonyManager.NETWORK_TYPE_LTE;
}
/**
-
判断wifi是否连接状态
-
需添加权限 {@code }
-
@param context 上下文
-
@return {@code true}: 连接
{@code false}: 未连接
*/
public static boolean isWifiConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm != null && cm.getActiveNetworkInfo() != null
&& cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
}
/**
-
获取移动网络运营商名称
-
如中国联通、中国移动、中国电信
-
@param context 上下文
-
@return 移动网络运营商名称
*/
public static String getNetworkOperatorName(Context context) {
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
return tm != null ? tm.getNetworkOperatorName() : null;
}
/**
-
获取移动终端类型
-
@param context 上下文
-
@return 手机制式
-
- {@link TelephonyManager#PHONE_TYPE_NONE } : 0 手机制式未知
- {@link TelephonyManager#PHONE_TYPE_GSM } : 1 手机制式为GSM,移动和联通
- {@link TelephonyManager#PHONE_TYPE_CDMA } : 2 手机制式为CDMA,电信
- {@link TelephonyManager#PHONE_TYPE_SIP } : 3
*/
public static int getPhoneType(Context context) {
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
return tm != null ? tm.getPhoneType() : -1;
}
/**
-
获取当前的网络类型(WIFI,2G,3G,4G)
-
需添加权限 {@code }
-
@param context 上下文
-
@return 网络类型
-
- {@link #NETWORK_WIFI } = 1;
- {@link #NETWORK_4G } = 4;
- {@link #NETWORK_3G } = 3;
- {@link #NETWORK_2G } = 2;
- {@link #NETWORK_UNKNOWN} = 5;
- {@link #NETWORK_NO } = -1;
*/
public static int getNetWorkType(Context context) {
int netType = NETWORK_NO;
NetworkInfo info = getActiveNetworkInfo(context);
if (info != null && info.isAvailable()) {
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
netType = NETWORK_WIFI;
} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
switch (info.getSubtype()) {
case NETWORK_TYPE_GSM:
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
netType = NETWORK_2G;
break;
case NETWORK_TYPE_TD_SCDMA:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
netType = NETWORK_3G;
break;
case NETWORK_TYPE_IWLAN:
case TelephonyManager.NETWORK_TYPE_LTE:
netType = NETWORK_4G;
break;
default:
String subtypeName = info.getSubtypeName();
if (subtypeName.equalsIgnoreCase(“TD-SCDMA”)
|| subtypeName.equalsIgnoreCase(“WCDMA”)
|| subtypeName.equalsIgnoreCase(“CDMA2000”)) {
netType = NETWORK_3G;
} else {
netType = NETWORK_UNKNOWN;
}
break;
}
} else {
netType = NETWORK_UNKNOWN;
}
}
return netType;
}
/**
-
获取当前的网络类型(WIFI,2G,3G,4G)
-
依赖上面的方法
-
@param context 上下文
-
@return 网络类型名称
-
- NETWORK_WIFI
- NETWORK_4G
- NETWORK_3G
- NETWORK_2G
- NETWORK_UNKNOWN
- NETWORK_NO
*/
public static String getNetWorkTypeName(Context context) {
switch (getNetWorkType(context)) {
case NETWORK_WIFI:
return “NETWORK_WIFI”;
case NETWORK_4G:
return “NETWORK_4G”;
case NETWORK_3G:
return “NETWORK_3G”;
case NETWORK_2G:
return “NETWORK_2G”;
case NETWORK_NO:
return “NETWORK_NO”;
default:
return “NETWORK_UNKNOWN”;
}
}
}
下拉刷新与上拉加载 用的我github上已经描述的XRecylerView
网络请求实现分页整体代码如下
public class TestRecylerViewActivity extends AppCompatActivity {
//初始化组件
@BindView(R.id.xrlv_recylerview)
XRecyclerView xrlvRecylerview;
//第一页
private int num=1;
private LinearLayoutManager llm;
private boolean flag;
private boolean tag;
private ListAdapter listAdapter;
private List<ProductList.DataBean> list;
/**
- retrofitService接口
*/
private RetrofitService rs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_recyler_view);
ButterKnife.bind(this);
llm=new LinearLayoutManager(this);
//设置chunzhi垂直布局
llm.setOrientation(LinearLayoutManager.VERTICAL);
xrlvRecylerview.setLayoutManager(llm);
//刷新时间可见
xrlvRecylerview.getDefaultRefreshHeaderView().setRefreshTimeVisible(true);
xrlvRecylerview.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
xrlvRecylerview.setLoadingMoreProgressStyle(ProgressStyle.SquareSpin);
//添加横向分割线
xrlvRecylerview.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
//创建Retrofit
rs=new RetrofitManager(this).createService(RetrofitService.class);
startHttpRequest(num);
// xrlvRecylerview.setAdapter(listAdapter);
xrlvRecylerview.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
flag=true;
num=1;
startHttpRequest(num);
}
@Override
public void onLoadMore() {
flag=false;
num++;
startHttpRequest(num);
}
});
}
/**
-
发起网络请求
-
@param pageNumber
*/
private void startHttpRequest(int pageNumber){
rs.getProductList(pageNumber,5).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber() {
@Override
public void onCompleted() {
写在最后
对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。
![
文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。
[外链图片转存中…(img-OcdDw2m8-1715269352660)]
[外链图片转存中…(img-gt8cTmBw-1715269352660)]
[外链图片转存中…(img-6A8ub4KQ-1715269352661)]
[外链图片转存中…(img-MjnCgqZ2-1715269352661)]
文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!