首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android面试题集锦(2019最新总结)

当时问到我的时候我还真不知道怎么回答,我只知道相同点:都是为了线程间通信。...静态注册是常驻型 (不能自动销毁),也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。 3.在同一个优先级下,谁先启动的快,谁将先接收到广播。...避免: 1.不要在主线程做耗时操作(数据库查询,网络操作,大量数据存储,图片的切割等)。 2.不要在广播内做耗时操作,如果非要,那么请通过Service新起线程来进行耗时操作。...区别:Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话...同样是在后台运行,不需要交互的情况下,如果只是完成某个任务,之后就不需要运行,而且可能是多个任务,不需要长时间运行的情况下使用线程。 2.如果任务占用CPU时间多,资源大的情况下,要使用线程。

33410

Android后台保活实践总结:即时通讯应用无法根治的“顽疾”

1)控制onStartCommand函数的返回值: 我对这个函数的理解是:当服务被异常终止时,是否重启服务?有些文章里面在用这个做保活时,修改的是flag,在我实际测试中是无效。...但能触发onDestory的情况,我不知道内存回收会不会触发。另外两种情况(2,3)是不触发的。我的测试方法是在“设置”-> 应用管理-> 正在运行-> 停止服务。...2)双服务我觉得没有native守护进程来的好,虽然360,微信什么的都有几个进程服务,但如果不添加到后台保活的话,效果一样不能保活,也会进入停止状态。...但是这种方式比较消耗电量,并且由于不同手机系统定制的改变,当应用被强制停止时,父进程并不一定被真正杀死,因此在一些特定机型上是无法通过此方式进行判断....这里推荐使用liunx socket的方式进行类似心跳包的检测,并且当触发检测Service是否被杀死之前,需要判断应用是否已经被卸载,如果应用已经被卸载,则不再进行检测Service行为,直接调用exit

2.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码

    前言 大家好,我是 Vic,今天给大家带来AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码的概述,希望你们喜欢 学习目标 掌握修改密码功能的开发,和实现用户密码的修改; 掌握设置密保的功能开发...,通过密保我们可以找回用户的密码,来保证用户的安全。...工具类 对于一个项目来说,项目中将多次用到sharedPreferences共享参数,去存储用户的登录状态或清除登录状态,“我”的界面也要求用到读取用户姓名的方法,所以我们干脆把这三个方法都扔到AnalysisUtils...头像点击后,会判断是否登录,如果登录了,则跳转到个人资料界面,如果没登录,则跳转到login登录的页面。...,点击“点击登录”按钮,登录完成后,应该显示“我”的界面,并且正常显示用户名。

    2K20

    最新iOS设计规范二|7大应用架构

    不要鼓励重启。重新启动会花费一些时间,并使应用看起来不可靠且难以使用。如果应用程序存在内存或其他问题,经常导致必须通过重启才能恢复,那一定要尽快解决掉这些问题。...避免要求别人对应用程序进行过快或过高的评分。在首次启动后不久(或在用户频繁应用程序前)询问评级很烦人,并且很可能会减少您收到的有用反馈的数量。...在系统将启动屏幕替换为初始屏幕之后,应当让用户立即进入并开始享受您的应用程序。如果您需要提供教程和引导,请务必提供一种跳过它们的方法,而且切忌向老用户展示它们。 预想用户可能会需要的帮助。...主动寻找和思考用户可能被卡住的地方。例如:游戏中在暂停或角色没有前进时显示一些有用的提示。让用户可以重播教程,以防第一次进入APP的他们错过任何内容。 突出教程中的要点。...如果APP需要有关用户、设备或环境的信息,请尽可能向系统请求,而不是直接询问用户。例如:如果你想要知道用户的邮政编码来提供本地选项时,可以向用户请求获取他们的位置。

    2.6K20

    Android面试

    Android开发中何时使用多进程 要想知道如何使用多进程,先要知道Android里的多进程概念。一般情况下,一个应用程序就是一个进程,这个进程名称就是应用程序包名。...坏处的话,多占用了系统的空间,大家都这么用的话系统内存很容易占满而导致卡顿。消耗用户的电量。应用程序架构会变复杂,应为要处理多进程之间的通信。这里又是另外一个问题了。...ContentResolver使用insert、delete、update、query方法,来操作数据。 请介绍下ContentProvider是如何实现数据共享的。...3、双进程Service:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程 4、AlarmManager不断启动service。...你还需要尽可能的减少onDraw被调用的次数,大多数时候导致onDraw都是因为调用了invalidate().因此请尽量减少调用invaildate()的次数。

    1K50

    【CSS】333- 使用CSS自定义属性做一个前端加载骨架

    虽然前端开发人员需要注意一些事情,比如压缩和缓存,但是设计人员必须考虑UI处于“加载”或“离线”状态时的外观和行为。 速度幻觉 随着我们对移动体验的期望发生变化,我们对性能的理解也在变化。...(Facebook的骨架屏) ? (Slack的骨架屏) 例子 假设你正在构建一个Web应用程序,这是一种旅行建议类型的东西,人们可以分享他们的旅行和推荐地点,所以你的主要内容可能看起来像这样: ?...如果代码交接给另外一个前端开发人员,他们就不知道所有这些神奇的数字来是从哪里来的,显然这是不易难维护的。...另外,我们还可以使用一些变量(比如头像大小、卡片填充)来定义实际卡片的样式,并始终使其与骨架版本保持同步。添加一个媒体查询来调整不同断点的骨架部分现在也非常简单: ?...我们需要做的就是在顶层放置一个新的渐变,然后使用它来设置其位置的动画 @keyframes 以下是成品骨架卡外观的完整骨架屏-demo: ?

    1.7K31

    Android开发高手课NOTE

    而且即使我们多次写入同一个文件,SP 也没有将多次修改合并为一次,这也是性能差的重要原因之一。 卡顿。由于提供了异步落盘的 apply 机制,在崩溃或者其他一些异常情况可能会导致数据丢失。...所以当应用收到系统广播,或者被调用 onPause 等一些时机,系统会强制把所有的 SharedPreferences 对象数据落地到磁盘。如果没有落地完成,这时候主线程会被一直阻塞。...如果你没有计划完全迁移到 Litho,我建议可以优先使用 Litho 中的 RecyclerCollectionComponent 和 Sections 来优化自己的 RecyelerView 的性能。...在最开始的时候,可能大家都不重视也不愿意去增加关键代码的日志,但是当我们通过日志平台解决了一些疑难问题以后,团队内部的成功案例越来越多的时候,这种习惯也就慢慢建立起来了。...如果你在大厂,就应该从客户端到后端,尽可能全面深入研究你参与的模块,多想想如何把你所做的模块优化到极致,并且在巨大的用户量面前依然能够稳定运行。

    89230

    Android 手表应用开发设计规范 【译】

    相同的生理指标?然后你就能够分析出在什么场景下给用户推送你的应用程序信息了。一定要记住,如果用户觉得你给出的建议那么不相关的话,用户随时有权利删掉你的建议卡片。...便捷选择 (Making it fast) 关于二维选择卡,有一些使用原则需要注意: •尽可能减少卡片的数量 •会频繁使用到的卡片应该在最上层 •卡片的内容和样式都应该尽量简单 •优先考虑方便用户快捷操作...如何退出   当用户做出选择后,应用应该自动退出二维选择卡界面。用户也可以向下滑动第一张卡片来退出,或者从左向右横滑处每个层级最左侧的卡片来退出。...该控件在全局系统界面中被广泛使用,包括上滑提示卡片后出现的列表中。当然,每款应用也可以根据自身需要打破这些常规控件样式。更详细的内容请参考应用架构规范部分。...采用较高提示卡时,状态指示应显示在屏幕上方或居中区域。如果你将状态指示或语音热词置于屏幕底部时,系统会强制使用高度较小的提示卡片。

    4.1K70

    如何在2021年编写网络应用程序?

    这将暂时失败,但请放心。 Optionals 这些工具不在本文讨论范围之内。也许我会在下一个中详细介绍。 我总是使用Eslint来检查代码中的潜在错误。...Components 想象一下,我想为我想看的每部电影制作一张简单的卡片(标题+文字),我不想重复每张卡片的代码。一个很好的规则是DRY(Don’t Repeat Yourself)。...这不是我想要的。 如果我向card组件添加属性并在主视图中写入数据,这将允许我为每张卡定义值。 使用Vue的仅运行时版本,而模板编译器不可用。) 您输入的Vue错误。如果您还记得的话,有很多导入Vue的方法。...当我们执行操作Vue.use(Vuetify);在index.js中,它将在整个项目中将其激活。使用它们时,可能仅导入Vuetify组件。但这需要做一些超出本教程范围的工作。

    10.9K20

    C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦

    一些屏幕示例可能是应用程序设置的模式对话框、Visual Studio中的代码编辑器窗口或浏览器中的页面。你可能对此有很好的直觉。...您可能已经注意到,CM的IConductor接口使用术语“项”而不是“屏幕”,我在引号中加了术语“屏幕集合”。原因是CM的导体实现不需要执行的项目来实现IScreen或任何特定接口。...View-First 如果您正在使用WP7或Silverlight导航框架,您可能想知道是否/如何利用屏幕和导体。到目前为止,我一直在假设外壳工程主要采用ViewModel优先的方法。...如果我有一个复杂的特性,那么我可能会将其分解为这些区域。 我不打算逐行检查这个样本。如果你花点时间仔细看看,自己弄清楚事情是如何运作的,那就更好了。但是,我想指出一些有趣的实现细节。...同一ViewModel上的多个视图 您可能不知道这一点,但是Caliburn.Micro可以在同一个ViewModel上显示多个视图。

    2.6K20

    Android-App性能优化

    (注:此图不知道啥时候收集的,如有侵权,立删): 快 如何让app在运行过程过不卡顿,运行流畅,速度快,也就是说如何解决卡顿呢?我们先看看那些因素影响卡顿? 1....还有就是刷新,刷新的话尽量减少不必要的刷新和尽可能减少刷新面积 启动优化 冷启动 冷启动是指安装apk后首次启动应用程序,或者应用程序上次结束,进程被杀死后重新打开app....创建Activity 导入视图(inflate view) 计算视图大小(onmesure view) 得到视图排版(onlayout view) 绘制视图(ondraw view) 应用程序进程完成首次绘制后...比如:线程的使用,这里我推荐使用线程池,我也写过相关文章,感兴趣的可以了解一下。Android-ThreadPooll....其他 这都是本人的一些建议: 序列化采用推荐的Parcelable代替Serializable 集合如果是插入和删除用的多,建议使用LinkList。如果修改用的多,建议ArrayList。

    2.2K40

    【面试黑洞】Android 的键值对存储有没有最优解?

    为了不卡主线程,我显然应该做成异步的; 但这是马上就要显示的文字,如果做成异步的,就极有可能在程序崩溃的时候,后台线程还没来得及把文字存到磁盘。...很明显,如果 SharedPreferences 用异步的 API 也就是 apply() 来保存的话,是不可能有这么差的性能的,这个一定是使用同步的 commit() 的性能来做的对比。...关于这一点,我相信,微信绝对不会把用户登录状态相关的信息用 MMKV 保存并且不做任何的备份,因为这一定会导致每天都会有一些用户在新一次打开微信的时候发现自己登出了。...虽然它的文件加载过程是在后台进行的,但如果代码在它加载完成之前就去尝试读取键值对,线程就会被卡住,直到文件加载完成,而如果这个读取的过程发生在主线程,就会造成界面卡顿,并且数据文件越大就会越卡。...SharedPreferences 如果使用同步方式来保存更改(commit()),会导致主线程的耗时;但如果使用异步的方式,给它加回调又很不方便,也就是如果你想做一些「等这个异步提交完成之后再怎么怎么样

    1.3K20

    android之SharedPreferences简介

    SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences...用法 2个activity 之间的数据传递除了可以通过intent来传递,还可以使用SharedPreferences来共享数据的方式 SharedPreferences 用法很简单....当然,如果你愿意保存其他的东西,也没有什么限制。只是在性能上不知道会有什么问题。...也就是说如果Preference中不存在这个值的话,那么就用后面的值作为返回指,这样就省去了我们的if什么什么为空的判断。...修改参数必须通过一个SharedPreferences.Editor对象,在存储他们时,以确保参数值有统一的状态和控制 目前此类不支持多线程 发布者:全栈程序员栈长,转载请注明出处:https

    4.4K20

    【无矶之谈】语雀宕机这事中我学到了什么?

    在本文我也会介绍我如何在本地管理笔记,如何同步。 现在让我们通过语雀这个事件,学习点知识吧。...响应状态码 在语雀崩溃后,刷新界面,我经历了310,503,404错误。...你可以简单地将 Obsidian 作为一个 Markdown 编辑器,来编辑、预览 Markdown 文件。但如果你希望更好地使用它,请记住它真正的力量在于管理密集的网络化知识库。...当然如果你使用的是图床,那自行找相关资料查阅,我这只搞本地。...如何线上同步 我使用的是gitee,直接创建仓库,把笔记当做代码一样。 你要是说移动端没法看,那我就要说你两句,微信又gitee小程序,可以登录你的gitee账号,一样可以浏览查看。

    86730

    Flutter 入门指北之数据持久化

    忘记的来看一下:Flutter 入门指北之状态管理,BLoC 上节讲了状态管理,但是当 App重启后,数据就都丢失了,这样就比较尴尬了,什么都要重来,所以这节我们来讲下数据持久化。...先看下效果吧,最终重启 App 后,数据也能正常读取显示,说明数据被保存下来了 ? ? ? ?...看下实现的代码,因为会涉及到多种方式,所以这边我把视图抽取出来实现 Widget _fileIoPart() { return Card( margin: const EdgeInsets.all...'); } } 因为外部存储的文件需要涉及到权限问题,而且 iOS 也不支持,所以如果需要使用文件来持久化数据的话,尽量使用另外两种。...sqflite 的基本操作语句,在文档中已经写得非常明白了,所以就不搬运了,这边直接讲下对于数据库的一些封装处理吧,因为打开数据库是一个很消耗资源的一个过程,所以呢,推荐实现单例会比较好。

    1.5K10

    软件说明书可以从桌面游戏中学到什么

    2.在桌子上放置一张Quest卡,按照说明进行游戏。(附一张Quest卡的外观图片。) 3.每回合使用两张牌。按照卡片给你的提示去做。获胜者是第一个完成Quest卡上写的内容的人。...现在,您是否不想阅读接下来的三段内容,以了解您可以从此处完成哪些有趣的事情?如果您的用户在空白屏幕上盯着您的三步介绍而又不知道下一步可能发生什么,则您需要重写文档,或者可能需要重写应用程序。...三个段落 在向用户保证他们可以继续使用并成功使用该应用程序之后,请与他们讨论下一步该怎么做。他们是否正在使用此应用程序来构建或分析小部件?这可以同时进行。它们是在服务器上设置此应用程序还是在本地使用?...后续部分的目的是提醒读者他们一旦下线后所处的状态。好比你再描述领土的分布,将遇到的对手,可以使用的武器和资源。...提供一个切入点,或者我们是否只是向潜在用户提供应用程序代码中包含的每种数据类型的清单,请他们在弄清所有含义后,从中编写自己的用户指南。 下次编写一说明书时,请尝试一下。

    72500

    Android可穿戴设备世界之旅

    如果您是 Android 爱好者,喜欢玩代码并想用它制作令人惊叹的应用程序,那么让我们为我们的手表构建一些很酷的东西!...因此,在设计时,请在屏幕上留出足够的空间让您的拇指完成这项工作。不要以项目过于相邻的方式设计应用,始终为大手势而设计。 如果要在应用中显示的内容太多,请将它们拆分为多个页面(卡片)。...图 4:安装 HAXM 以提高仿真器性能 您可以使用“显示高级设置”按钮来编辑模拟器的配置,即内存、SD 卡等。...图 2:更改文本后的输出 相当多的事实 在进一步讨论之前,需要考虑一些重要因素。 在圆形和矩形形状之间切换 在创建项目时,我们发现了矩形和圆形磨损设备的 2 种不同的布局名称。...在一些逻辑层面上,它可能会更令人愉快。关于谷歌地图、WatchFace等,还有更多有趣的可穿戴应用程序开发范围,希望我能在不久的将来带着这些很棒的话题回来。

    12810

    应用保活终极总结(二):Android6.0及以上的保活实践(进程防杀篇)

    说起来比较绕口,总之本文要讨论的内容是如何防止Android应用被系统“杀掉”,下篇讨论的是“被杀掉”后如何让它复活。...接下来我将首先分析市面上的主流APP防杀方式,为我接下来的方案提供参考依据,请继续往下阅读。 5、市场主流运动类APP保活分析:咕咚(v 7.17.0) 5.1 一键清理/滑动清理 a....咕咚"被清理后能够自动重启,通知被删除后自动弹出,说明可能有另外一个东西(进程或Service)监听器运动Service(或进程)存活状态,当Service被销毁时,立马将其拉起来;   - ④“咕咚...”被强制停止或清理杀死后,再次进入会直接显示运动界面且能够保持杀死之前的运动状态,说明其可能利用配置文件记录了相关状态;   - ⑤锁屏/解锁后,"咕咚"运动界面会自动弹出,说明其利用了广播机制对锁屏广播进行监听...如果使用弱引用的话,对象A只会被WeakReference所依赖,当a=null时,GC会回收它,从而避免了内存泄漏。

    4.2K21

    ViewModels and LiveData- Patterns + AntiPatterns

    视图通常没有单元测试(除非你使用Robolectric),所以代码行数越少越好。视图应该只知道如何显示数据并将用户事件发送到ViewModel(或Presenter)。这就是所谓的被动视图模式。...当一个ViewModel活着并运行时,一个Activity可以处于其生命周期的任何状态。在ViewModel不知道的情况下,Activity和Fragment可以被销毁并再次创建。...由于ViewModel并不了解Android,所以它不知道Android是如何喜欢频繁地杀死View的。这有一些好处。...如果你的ViewModel容纳了太多的代码或者有太多的责任,可以考虑。 将一些逻辑转移到与ViewModel相同范围的presenter中。...考虑一下这个图,视图层使用观察者模式,数据层使用回调。 img 如果用户退出了应用程序,视图就会消失,所以ViewModel就不会再被观察。

    1.1K30
    领券