Hulk Su

Results 36 comments of Hulk Su

@13468531669 仓库尚未更新,近期会更新提交一个版本

回答统一格式,如: - 问题内容:接口与抽象类的区别? - 所属范围:Java 相关 - 问题出处(可选):xxx公司面试题 - 出现频率(可选):★★★★☆ (此处表示4.5星,满分为:★★★★★) - 困难指数(可选):★★★☆ (此处表示3.5星,满分为:★★★★★) - 参考答案(可选):xxxxx

`LaunchMode` 有四种,分别为 `Standard`,`SingleTop`,`SingleTask` 和 `SingleInstance`,每种模式的实现原理一楼都做了较详细说明,下面说一下具体使用场景: - Standard: Standard 模式是系统默认的启动模式,一般我们 app 中大部分页面都是由该模式的页面构成的,比较常见的场景是:社交应用中,点击查看用户A信息->查看用户A粉丝->在粉丝中挑选查看用户B信息->查看用户A粉丝... 这种情况下一般我们需要保留用户操作 Activity 栈的页面所有执行顺序。 - SingleTop: SingleTop 模式一般常见于社交应用中的通知栏行为功能,例如:App 用户收到几条好友请求的推送消息,需要用户点击推送通知进入到请求者个人信息页,将信息页设置为 SingleTop 模式就可以增强复用性。 - SingleTask: SingleTask 模式一般用作应用的首页,例如浏览器主页,用户可能从多个应用启动浏览器,但主界面仅仅启动一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。 - SingleInstance: SingleInstance 模式常应用于独立栈操作的应用,如闹钟的提醒页面,当你在A应用中看视频时,闹钟响了,你点击闹钟提醒通知后进入提醒详情页面,然后点击返回就再次回到A的视频页面,这样就不会过多干扰到用户先前的操作了。

发现一个Android各版本适配指南:https://github.com/getActivity/AndroidVersionAdapter,感觉挺全的,分享一下。

>很早我们就被灌输一个既定事实:子线程不能够更新UI。然而,UI真的无法在子线程更新吗?为什么?这里的题意可能会被误解,所以备注一下。

@wardenlzr 使用 `StringBuilder` 代替 `String` 来实现大量字符串的拼接,之前回答的角度有问题

以上两位层主推荐的文章都比较详细的说明了 `Context` 的来龙去脉和应用场景,这里再简单概括一下: `Context` 宏观来说是一个描述应用程序全局信息的场景,当然,本质上来说,这个“场景”其实是一个抽象类,它是一个应用程序的“灵魂人物”,从下面的图中就可以发现 `Activity`、`Service`、`Application` 都是 `Context` 的子类: ![20160519210912888](https://user-images.githubusercontent.com/31280310/55070252-d2ace580-50c0-11e9-9dbb-0064e03da3d8.png) Context 虽然无所不在,但是某些特定场景下需要使用特定的 `Context`,如启动一个弹窗,必须是依赖于 `Activity` 的,所以,使用 `Dialog` 必须传入当前 `Activity` 场景下的 “context”,关于 `Context` 的作用域可以参考下图: ![QkpfS](https://user-images.githubusercontent.com/31280310/55070060-6336f600-50c0-11e9-8ebd-3fcee3f4d9f2.png) 详细来龙去脉可参考上面两篇文章。 其他问题,如: - getApplication()和getApplicationContext()的区别? - `Context` 导致的内存泄漏问题?...

大体区别如下: - 抽象类可以提供成员方法的实现细节,而接口中只能存在 public 抽象方法; - 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 `public static final` 类型的; - 接口中不能含有构造器、静态代码块以及静态方法,而抽象类可以有构造器、静态代码块和静态方法; - 一个类只能继承一个抽象类,而一个类却可以实现多个接口; - 抽象类访问速度比接口速度要快,因为接口需要时间去寻找在类中具体实现的方法; - 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。如果你往接口中添加方法,那么你必须改变实现该接口的类。 - 接口更多的为了约束类的行为,可用于解耦,而抽象类更加侧重于代码复用。 **同时这里也抛出一个问题:日常SDK开发过程中如果直接更改接口函数可能会导致兼容性问题,一般情况下我们可以如何规避这个问题?**

@manondidi 不错,Java8之后interface被扩展了,感谢补充😉 :octocat: [From gitme Android](http://flutterchina.club/app/gm.html)

1. 资源对象没关闭造成的内存泄漏(如: `Cursor`、`File`等) 2. ~~`ListView` 的 `Adapter` 中没有使用缓存的 `ConvertView`~~ 3. `Bitmap` 对象不在使用时调用recycle()释放内存 4. 集合中对象没清理造成的内存泄漏(特别是 `static` 修饰的集合) 5. 接收器、监听器注册没取消造成的内存泄漏 6. `Activity` 的 `Context` 造成的泄漏,可以使用 `ApplicationContext` 7. `Handler` 造成的内存泄漏问题(一般由于 `Handler` 生命周期比其外部类的生命周期长引起的)