2024年Android最新Android HandlerThread 完全解析,2024年最新android内存优化面试题

尾声

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

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

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

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

private HandlerThread mCheckMsgThread;

private Handler mCheckMsgHandler;

private boolean isUpdateInfo;

private static final int MSG_UPDATE_INFO = 0x110;

//与UI线程管理的handler

private Handler mHandler = new Handler();

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_thread_handler);

//创建后台线程

initBackThread();

mTvServiceInfo = (TextView) findViewById(R.id.id_textview);

}

@Override

protected void onResume()

{

super.onResume();

//开始查询

isUpdateInfo = true;

mCheckMsgHandler.sendEmptyMessage(MSG_UPDATE_INFO);

}

@Override

protected void onPause()

{

super.onPause();

//停止查询

isUpdateInfo = false;

mCheckMsgHandler.removeMessages(MSG_UPDATE_INFO);

}

private void initBackThread()

{

mCheckMsgThread = new HandlerThread(“check-message-coming”);

mCheckMsgThread.start();

mCheckMsgHandler = new Handler(mCheckMsgThread.getLooper())

{

@Override

public void handleMessage(Message msg)

{

checkForUpdate();

if (isUpdateInfo)

{

mCheckMsgHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO, 1000);

}

}

};

}

/**

  • 模拟从服务器解析数据

*/

private void checkForUpdate()

{

try

{

//模拟耗时

Thread.sleep(1000);

mHandler.post(new Runnable()

{

@Override

public void run()

{

String result = “实时更新中,当前大盘指数:%d”;

result = String.format(result, (int) (Math.random() * 3000 + 1000));

mTvServiceInfo.setText(Html.fromHtml(result));

}

});

} catch (InterruptedException e)

{

e.printStackTrace();

}

}

@Override

protected void onDestroy()

{

super.onDestroy();

//释放资源

mCheckMsgThread.quit();

}

}

可以看到我们在onCreate中,去创建和启动了HandlerThread,并且关联了一个mCheckMsgHandler。然后我们分别在onResume和onPause中去开启和暂停我们的查询,最后在onDestory中去释放资源。

这样就实现了我们每隔5s去服务端查询最新的数据,然后更新我们的UI,当然我们这里通过Thread.sleep()模拟耗时,返回了一个随机数,大家可以很轻易的换成真正的数据接口。

布局文库

<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools=“http://schemas.android.com/tools”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:paddingLeft=“@dimen/activity_horizontal_margin”

android:paddingRight=“@dimen/activity_horizontal_margin”

android:paddingTop=“@dimen/activity_vertical_margin”

android:paddingBottom=“@dimen/activity_vertical_margin”>

<TextView

android:id=“@+id/id_textview”

android:text=“正在加载大盘指数…”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”/>

运行效果图

别问我为什么要用红色!!!

ok,当然了,我们的效果很单调,但是你完全可以去扩展,比如ListView显示用户关注的股票数据。或者是其他的需要一直检测更新的数据。

看到这,你是否好奇呢,HandlerThread的内部是如何做的呢?其实非常的简单,如果你看过Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系估计扫几眼就会了。

HandlerThread 源码分析

对于所有Looper,Handler相关细节统一参考上面提到的文章。

我们轻轻的掀开HandlerThread的源码,还记得我们是通过

mCheckMsgThread = new HandlerThread(“check-message-coming”);

mCheckMsgThread.start();

创建和启动的对象,那么随便扫一眼:

package android.os;

public class HandlerThread extends Thread {

int mPriority;

int mTid = -1;

Looper mLooper;

public HandlerThread(String name) {

super(name);

mPriority = Process.THREAD_PRIORITY_DEFAULT;

}

protected void onLooperPrepared() {

}

@Override

最后

这里我特地整理了一份《Android开发核心知识点笔记》,里面就包含了自定义View相关的内容

除了这份笔记,还给大家分享 Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。

分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~

喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~

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

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

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

精进的朋友。

[外链图片转存中…(img-plAS7MbS-1714959088223)]

分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~

喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~

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

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

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

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到Android面试题时,高级级别的问题通常会涉及更深入的主题和技术。以下是一些可能的高级Android面试题及其答案: 1. 请解释一下Android中的四大组件。 答:Android中的四大组件是Activity、Service、BroadcastReceiver和ContentProvider。Activity用于用户界面的展示和交互,Service用于在后台执行长时间运行的任务,BroadcastReceiver用于接收和处理系统广播消息,ContentProvider用于数据共享和访问。 2. 请解释一下Android中的MVC、MVP和MVVM架构模式。 答:MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为模型(数据)、视图(用户界面)和控制器(逻辑处理)三个部分。MVP(Model-View-Presenter)是MVC的变体,将控制器替换为Presenter,使视图和模型之间的耦合更低。MVVM(Model-View-ViewModel)是一种新的架构模式,通过数据绑定实现视图和模型之间的通信。 3. 请解释一下Android中的内存泄漏以及如何避免。 答:内存泄漏是指应用程序中未使用的内存无法被垃圾回收器回收,导致内存占用不断增加。在Android中,常见的内存泄漏原因包括静态引用、匿名内部类、Handler引起的内存泄漏等。避免内存泄漏的方法包括及时释放资源、避免使用静态引用、避免匿名内部类等。 4. 请解释一下Android中的线程和线程间通信方式。 答:在Android中,可以使用Thread类或者HandlerThread类创建线程。线程间通信的方式包括使用Handler进行消息传递、使用AsyncTask进行异步任务处理、使用BroadcastReceiver进行广播消息传递等。 5. 请解释一下Android中的性能优化技巧。 答:Android性能优化的技巧包括减少内存使用、优化布局和绘制、使用合适的数据结构和算法、避免频繁的IO操作、使用缓存等。此外,还可以使用工具如Lint、TraceView和HierarchyViewer进行性能分析和调优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值