精华内容
下载资源
问答
  • Android基本知识点1、常规知识点1、 Android类加载器在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件...

    Android基本知识点

    1、常规知识点

    1、 Android类加载器

    在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把所有Class文件进行合并、优化,然后再生成一个最终的class.dex,目的是把不同class文件重复的东西只需保留一份,在早期的Android应用开发中,如果不对Android应用进行分dex处理,那么最后一个应用的apk只会有一个dex文件。

    Android中常用的类加载器有两种,DexClassLoader和PathClassLoader,它们都继承于BaseDexClassLoader。区别在于调用父类构造器时,DexClassLoader多传了一个optimizedDirectory参数,这个目录必须是内部存储路径,用来缓存系统创建的Dex文件。而PathClassLoader该参数为null,只能加载内部存储目录的Dex文件。所以我们可以用DexClassLoader去加载外部的apk文件,这也是很多插件化技术的基础。

    1460000019791756

    2、 Service

    理解Android的Service,可以从以下几个方面来理解:

    Service是在main Thread中执行,Service中不能执行耗时操作(网络请求,拷贝数据库,大文件)。

    可以在xml中设置Service所在的进程,让Service在另外的进程中执行。

    Service执行的操作最多是20s,BroadcastReceiver是10s,Activity是5s。

    Activity通过bindService(Intent,ServiceConnection,flag)与Service绑定。

    Activity可以通过startService和bindService启动Service。

    IntentService

    IntentService是一个抽象类,继承自Service,内部存在一个ServiceHandler(Handler)和HandlerThread(Thread)。IntentService是处理异步请求的一个类,在IntentService中有一个工作线程(HandlerThread)来处理耗时操作,启动IntentService的方式和普通的一样,不过当执行完任务之后,IntentService会自动停止。另外可以多次启动IntentService,每一个耗时操作都会以工作队列的形式在IntentService的onHandleIntent回调中执行,并且每次执行一个工作线程。IntentService的本质是:封装了一个HandlerThread和Handler的异步框架。

    2.1、生命周期示意图

    Service 作为 Android四大组件之一,应用非常广泛。和Activity一样,Service 也有一系列的生命周期回调函数,具体如下图。

    1460000019791757

    通常,启动Service有两种方式,startService和bindService方式。

    2.2、startService生命周期

    当我们通过调用了Context的startService方法后,我们便启动了Service,通过startService方法启动的Service会一直无限期地运行下去,只有在外部调用Context的stopService或Service内部调用Service的stopSelf方法时,该Service才会停止运行并销毁。

    onCreate

    onCreate: 执行startService方法时,如果Service没有运行的时候会创建该Service并执行Service的onCreate回调方法;如果Service已经处于运行中,那么执行startService方法不会执行Service的onCreate方法。也就是说如果多次执行了Context的startService方法启动Service,Service方法的onCreate方法只会在第一次创建Service的时候调用一次,以后均不会再次调用。我们可以在onCreate方法中完成一些Service初始化相关的操作。

    onStartCommand

    onStartCommand: 在执行了startService方法之后,有可能会调用Service的onCreate方法,在这之后一定会执行Service的onStartCommand回调方法。也就是说,如果多次执行了Context的startService方法,那么Service的onStartCommand方法也会相应的多次调用。onStartCommand方法很重要,我们在该方法中根据传入的Intent参数进行实际的操作,比如会在此处创建一个线程用于下载数据或播放音乐等。

    public @StartResult int onStartCommand(Intent intent, @StartArgFlags int flags, int startId) {

    }

    当Android面临内存匮乏的时候,可能会销毁掉你当前运行的Service,然后待内存充足的时候可以重新创建Service,Service被Android系统强制销毁并再次重建的行为依赖于Service中onStartCommand方法的返回值。我们常用的返回值有三种值,START_NOT_STICKY、START_STICKY和START_REDELIVER_INTENT,这三个值都是Service中的静态常量。

    START_NOT_STICKY

    如果返回START_NOT_STICKY,表示当Service运行的进程被Android系统强制杀掉之后,不会重新创建该Service,当然如果在其被杀掉之后一段时间又调用了startService,那么该Service又将被实例化。那什么情境下返回该值比较恰当呢?如果我们某个Service执行的工作被中断几次无关紧要或者对Android内存紧张的情况下需要被杀掉且不会立即重新创建这种行为也可接受,那么我们便可将 onStartCommand的返回值设置为START_NOT_STICKY。举个例子,某个Service需要定时从服务器获取最新数据:通过一个定时器每隔指定的N分钟让定时器启动Service去获取服务端的最新数据。当执行到Service的onStartCommand时,在该方法内再规划一个N分钟后的定时器用于再次启动该Service并开辟一个新的线程去执行网络操作。假设Service在从服务器获取最新数据的过程中被Android系统强制杀掉,Service不会再重新创建,这也没关系,因为再过N分钟定时器就会再次启动该Service并重新获取数据。

    START_STICKY

    如果返回START_STICKY,表示Service运行的进程被Android系统强制杀掉之后,Android系统会将该Service依然设置为started状态(即运行状态),但是不再保存onStartCommand方法传入的intent对象,然后Android系统会尝试再次重新创建该Service,并执行onStartCommand回调方法,但是onStartCommand回调方法的Intent参数为null,也就是onStartCommand方法虽然会执行但是获取不到intent信息。如果你的Service可以在任意时刻运行或结束都没什么问题,而且不需要intent信息,那么就可以在onStartCommand方法中返回START_STICKY,比如一个用来播放背景音乐功能的Service就适合返回该值。

    START_REDELIVER_INTENT

    如果返回START_REDELIVER_INTENT,表示Service运行的进程被Android系统强制杀掉之后,与返回START_STICKY的情况类似,Android系统会将再次重新创建该Service,并执行onStartCommand回调方法,但是不同的是,Android系统会再次将Service在被杀掉之前最后一次传入onStartCommand方法中的Intent再次保留下来并再次传入到重新创建后的Service的onStartCommand方法中,这样我们就能读取到intent参数。只要返回START_REDELIVER_INTENT,那么onStartCommand重的intent一定不是null。如果我们的Service需要依赖具体的Intent才能运行(需要从Intent中读取相关数据信息等),并且在强制销毁后有必要重新创建运行,那么这样的Service就适合返回START_REDELIVER_INTENT。

    onBind

    Service中的onBind方法是抽象方法,所以Service类本身就是抽象类,也就是onBind方法是必须重写的,即使我们用不到。在通过startService使用Service时,我们在重写onBind方法时,只需要将其返回null即可。onBind方法主要是用于给bindService方法调用Service时才会使用到。

    onDestroy

    onDestroy: 通过startService方法启动的Service会无限期运行,只有当调用了Context的stopService或在Service内部调用stopSelf方法时,Service才会停止运行并销毁,在销毁的时候会执行Service回调函数。

    2.3、bindService生命周期

    1460000019791758

    bindService方式启动Service主要有以下几个生命周期函数:

    onCreate():

    首次创建服务时,系统将调用此方法。如果服务已在运行,则不会调用此方法,该方法只调用一次。

    onStartCommand():

    当另一个组件通过调用startService()请求启动服务时,系统将调用此方法。

    onDestroy():

    当服务不再使用且将被销毁时,系统将调用此方法。

    onBind():

    当另一个组件通过调用bindService()与服务绑定时,系统将调用此方法。

    onUnbind():

    当另一个组件通过调用unbindService()与服务解绑时,系统将调用此方法。

    onRebind():

    当旧的组件与服务解绑后,另一个新的组件与服务绑定,onUnbind()返回true时,系统将调用此方法。

    免费获取Android进阶资料点击下方链接

    展开全文
  • 每当我们换工作面试之前,总是会不由自主的刷起面试题,大部分题我们反反复复不知道刷了多少遍,但是今天记住了,等下一次面试的时候又刷着相同的面试题,我就想问在座的各位,Activity的生命周期,你们到底刷过多少遍 [哭...

    每当我们换工作面试之前,总是会不由自主的刷起面试题,大部分题我们反反复复不知道刷了多少遍,但是今天记住了,等下一次面试的时候又刷着相同的面试题,我就想问在座的各位,Activity的生命周期,你们到底刷过多少遍 [哭笑] 作为一名程序员 把时间浪费在重复性劳动上是极其不能忍受的 因此 为了让自己省去不必要的脑力开销 我给自己总结了一份面试相关的记忆技巧,在这里分享给大家 记忆不是目的 把知识变成自己的才最关键

    四大组件是什么?

    Activity【活动】:用于页面展示和交互。

    Service【服务】:后台运行服务,不提供界面呈现。

    BroadcastReceiver【广播接收器】:用来接收广播。

    Content Provider【内容提供商】:支持在多个应用中存储和读取数据,相当于数据库。

    如何一次性记忆四大组件

    如果让你去设计一款操作系统,你会怎么设计?

    针对具有交互性的操作系统而言,需要具备以下几种基础功能 :

    首先 程序的界面的展示是必不可少的 这是其一 (Activity)

    其二 程序中也许不止一个界面 多个界面之间需要进行通信和数据传递 (BroadcastReceiver)

    第三 多个程序之间需要进行通信和数据传递 (Content Provider)

    第四 程序界面未显示的时也能随时响应用户操作 可后台运行 (Service)

    *当你理解了设计者的用意后 确实能很好的理解四大组件的含义, 但是并不意味着你能很好的记忆住他们 在面试过程中你必须要有较快的反应速度 *

    在这里我抛出几种右脑记忆思路:

    取四大组件英文首字母得到 ABCS 当对方问你四大组件都有哪些时 你能立马联想到英文字母ABC

    这四大组件能让你联想到什么画面?

    到这里 有些人可能会说了 四大组件这么好记 还用得着这么费劲记忆?

    我想说的是 如果你在工作中经常使用这些知识 那么它们对你来讲是非常熟悉的 但是针对初学者或者很长时间没有使用的开发者而言 一套合理的记忆技巧是非常有帮助的 我想若干年后 你也许忘了四大组件都有哪些了 但是你依然记得文本所说的ABC 这个时候 回忆起来 也只是一念之间的事儿

    本帖附件

    乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

    展开全文
  • Android Handler四大组件?

    2021-05-27 02:00:00
    MessageMessage是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。 例:Message的what字段、arg1字段、arg2字段来携带整型数据,obj字段携带一个Object对象。Handler处理者,它主要...

    Message

    Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。 例:Message的what字段、arg1字段、arg2字段来携带整型数据,obj字段携带一个Object对象。

    Handler

    处理者,它主要用来发送和处理消息。发送消息一般是使用Handler的sendMessage()方法,消息经过处理后,最终传递到Handler的handlerMessage()方法中。

    MessageQueue

    消息队列,它主要用来存放所有通过Handler发送的消息,这部分消息会一直存在于消息队列中,等待被处理。注意:每个线程中只会有一个MessageQueue对象。

    Looper

    是每个线程中MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环当中,每当发现MessageQueue中存在一条消息,就会将其取出传递到Handler的handleMessage()方法当中。

    注意:每个线程中只会有一个Looper对象。

    异步消息处理流程:在主线程当中创建一个Handler对象;

    重写handleMessage()方法;

    当子线程需要进行UI操作时,创建一个Message对象,并通过Handler将消息发送出去;

    消息添加到MessageQueue的队列中等待被处理;

    Looper在MessageQueue中取出待处理消息,发回Handler的handleMessage()方法中。

    【由于Handler是在主线程中创建的,因此我们的handleMessage()方法中的代码也会在主线程中执行,避免了异常的产生】

    展开全文
  • 1.Android四大组件:Activity、Service、BroadcastReceiver、ContentProvider 的作用 它们的作用分别是: Activity—>配合View展示界面 Service—>长时间在后台运行不与用户直接交互 BroadcastReceiver—&...

    1.Android四大组件:Activity、Service、BroadcastReceiver、ContentProvider 的作用

     它们的作用分别是:

    Activity—>配合View展示界面
    Service—>长时间在后台运行不与用户直接交互
    BroadcastReceiver—>接收广播
    ContentProvider—>提供数据给其他模块使用

    2、App启动的入口在哪 

    展开全文
  • Activity是在面试过程中经常会被问到的四大组件之一,比如它的生命周期、启动模式等等,在这里将详细展开来讲解,不只是为了应付面试,在平时的开发过程中,掌握这些知识也是很重要的。Q:Activity的生命周期?A:...
  • 做两快三年的Android开发,工作的任务也就是一些界面的编写,RecyclerView的简单使用,网络框架也是别人封装好的直接用,再就是集成些第三方的分享、支付什么的!技术上的提升可以说根本没有,和工作一年左右的人,...
  • 对于Android一般的面试流程,除了极个别的喜欢不拘一格,大部分的面试过程都差不多,除掉了笔试环节,面试流程大多如下:关于项目经验,对于应届毕业生来说,目前还不适合启动,所以会靠后一些进行讲解。如果有着急...
  • Activity:APP应用程序用来展示页面的窗口,需要在清单文件注册,一般activity之间使用intent通信service:服务:是一个没有界面常驻后台的组件BroadCastReceiver广播:主要用来接收和发送广播按照广播种类:分为...
  • Activity是Android四大组件之一,为用户提供与系统交互的界面,每一个应用都有一个或者多个Acticity,这样会有各种各样的细节问题需要查找,我将本人接触到的知识点汇总到此篇文章。2. 生命周期Activity生命周期的回...
  • 我们可以将Android核心APIs(core APIs)叫做“系统框架”(system framework),而平台APIs(platform APIs)最主要的功能是定义APP应如何与操作系统交互,与APP内部运行逻辑毫不相关。 个人理解:可以简单地将...
  • Android面试04-四大组件之ContentProvider1.作用1.进程内通信2.进程间通信 进程间 进行数据交互 & 共享,即跨进程通信 1.作用 1.进程内通信 步骤说明: 创建 SQLite 数据库类 自定义 ContentProvider 类 注册 ...
  • 前言分享这一篇文章的原因主要是因为在面试中,服务这个关键词的出现频率非常高。很多时候,面试官会问你,Service中能否进行耗时操作?我们稍后就会揭晓这个答案。作用:服务于需要长期运行的任务,比如资源下载、...
  • 谈谈对Android四大组件的认识这都是基本常识** Activity**BrocastReceiverContentProviderService1. Activity图1-继承关系图2-activity生命周期使用activity需要在AndroidManifest.xml中注册android:name="....
  • Android面试02-四大组件之Service1.service的启动方式第一种第二种两者区别2.service的生命周期第一种第二种3.service怎么使用第一种第二种4.service怎么进行耗时操作方法一:service中开子线程方法二: 使用...
  • 作为Android四大组件之一,Activity占据着非常重要的作用。本文将围绕Android的生命周期、启动模式、基本配置等方面进行介绍。简介应用程序的每一个界面都是一个Activity,所以也有人称其为视图界面。从字面的意思...
  • 前言 回顾一下自己这段时间的经历,三月份的时候,疫情原因公司通知了裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到offer,我感觉今年的寒冬有点冷。到五月份,公司开始第二...Android Jetpack组件的作用是什么?
  • Android四大核心组件(五大核心组件)分别是Activity,Service,Intent,Content Provider,BroadCast Receiver等,它们都具有良好的生命周期,在android开发中,经常会使用到这几大核心组件的,下面将用简短的语句来...
  • Android面试03-四大组件之BroadCast1.按发送方式分类1. 标准广播2. 有序广播2.按注册方式 分类1. 静态注册广播2.动态注册广播3. 按定义方式分类1.系统广播2.自定义广播4.EventBus 1.按发送方式分类 1. 标准广播 一种...
  • import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class CustomReceiver extends BroadcastReceiver { private static...
  • Android面试必问四大组件之Activity活动(Activity)1. 生命周期2. 启动模式(LaunchMode)3. 启动过程4. 卡顿原因5. 加速启动方式6. 碎片(Fragment)6.1 生命周期6.2 常见的一些生命周期的变化6.3 Activity与Fragment的...
  • 据我所知百分之九十的Android开发都在30k以下! 但是在我的群里有一位同学,平时就喜欢研究源码和框架,然后经过一个月的刷题,跳槽到头条,拿到了 50k 的月薪,我觉得太厉害了,羡慕嫉妒恨啊。 后来我和他聊了下,...
  • Android四大组件】之Service

    千次阅读 2021-11-12 17:05:59
    Android四大组件之Service 基本概念 Service(服务)是一种可以在后台执行长时间运行操作而不提供界面的应用组件,服务可以由其他应用组件启动。 在当前应用启动一个服务后,即使用户切换到其他应用,服务仍可以在...
  • 我们知道 Android 应用程序是由 Activity、Service、Broadcast Receiver 和 Content Provide 四大组件中的一个或者多个组成的。有时这些组件运行在同一进程,有时运行在不同的进程。这些进程间的通信就依赖于 ...
  • Android面试01-四大组件之Activity1. activity的生命周期2. activity的启动模式3. activity的启动方法1.显式启动2.隐式启动4. activity A 打开 activity B 的生命周期5. activity B 按下back,返回activity A的生命...
  • 众所周知,Android是一个基于Linux实现的操作系统。但对于Linux内核来说,Android也仅仅只是一个运行在内核之上的应用程序,与其他运行在内核之上的应用程序没有任何区别。 所以Android也需要运行环境,需要Linux...
  • 1、android工程的组件一般分为两种: **application组件:**是指该组件本身就可以运行并打包成apk **lib组件:**是指该组件属于app的一部分,可以供其它组件使用但是本身不能打包成apk 正常一个App中可以有多...
  • Android项目中代码量达到一定程度,编译将是一件非常痛苦的事情,短则一两分钟,长则达到五六分钟。随着app业务的壮大,模块越来越多,代码量超10万是很正常的,这个时候我们会遇到以下问题: 稍微改动一个模块的...
  • 推荐文章: Android四大组件启动机制之Activity启动过程 Fragment 1、谈一谈Fragment的生命周期? 参考回答: Fragment从创建到销毁整个生命周期中涉及到的方法依次为:onAttach()→onCreate()→ onCreateView()→...
  • 各种面试基本二面挂,最惨的一次的就是美团电话一面后,面试官要我去北京现场面(后来才知道原来美团在长沙和武汉都是有面试点的),还一毛钱没给报销,当时**怕不去就没面试机会了, 9.20那天一个人从长沙跑到北京去...
  • 备战2022,Android中高级面试必知必会

    千次阅读 2021-11-10 16:52:24
    正好我在9月份和10月份整理和收集了 Android 中高级面试真题解析,于是就发上来分享给大家。 这些题目是网友去字节跳动、小米、oppo、美团、阿里巴巴、腾讯、360、华为、京东等一线互联网公司面试被问到的题目。熟悉...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,261
精华内容 4,104
关键字:

android四大组件面试