下一步安卓手机应该选啥

目前手持小米 10,去年双十一买的,不过小米是真的拉跨,刚买来的时候屏幕自己乱点,寄回去检测说没毛病,给刷了下系统,寄回来到时不乱点了,使用过程中无端卡死了几次,重启才好的,有次还在买早饭付钱…

oppo,vivo 不太想买,感觉钱都用在请明星代言上了

华为…他变成鸿蒙了

剩下的就只知道个一加了,还没咋了解过

拉跨 小米 双十一 OPPO66 条回复 • 2021-10-15 09:34:04 +08:00
murmur 1
murmur 17 小时 24 分钟前
买红米别买小米
2435043xia 2
2435043xia 17 小时 22 分钟前
建议别换,等等看 898 。已经被迫换 iPhone 了,安卓阵营没一个能打的。
AoEiuV020 3
AoEiuV020 17 小时 22 分钟前
我下一代想买个一加,但是觉得贵还没确定买,
qqg1530 4
qqg1530 17 小时 20 分钟前 via Android
我现在用小米 9,下一部换个红米手机,希望 898 给力
liliclinton 5
liliclinton 17 小时 20 分钟前
一加本质也是 ov 没差,建议看看 realme 和 iqoo
Oscar1994 6
Oscar1994 17 小时 13 分钟前
别买小米就 OK
lovedebug 7
lovedebug 17 小时 8 分钟前 ❤️ 3
一加已经加入了 ov 。。。系统都变成了 color os
ro2020 8
ro2020 17 小时 5 分钟前
三星
iovekkk 9
iovekkk 16 小时 57 分钟前
作为了一个资深 Android 开发
我用苹果全家桶已经用好多年了
身边的同事就算不用苹果全家桶
iPhone 和 mac 也是标配
所以,你懂的
BBCCBB 10
BBCCBB 16 小时 55 分钟前 ❤️ 1
@liliclinton 这 realme, iqoo 也是 ov 吧?
qq316107934 11
qq316107934 16 小时 54 分钟前
被迫换到 iPhone +1,什么时候膏通不挤牙膏,Scoped Storage 普及之后会考虑回来,大底相机香的,观望下 Pixel 6 Pro,有点嫌弃曲面屏和机身大小。
amusier 12
amusier 16 小时 54 分钟前
上一部手机是 MIX 2S,现在用的是 MI 11 PRO,可能是我运气好?我用的小米没啥大毛病,唯一的就是耗电快一些,亮屏时间 6 小时左右,后来一想,2K 屏幕+120 刷新率,可以接受。而且小米的搞机性能也是别的品牌无法比拟的,我的已经解锁,刷了第三方 ROM,面具+框架全部安排上,可玩性高得很。
rpish 13
rpish 16 小时 51 分钟前 ❤️ 1
坚果 r2
不开玩笑 大爆炸 闪念胶囊 一步 真的好用 效率神器
而且 smartism os 的拟物图标 特别精致
way2create 14
way2create 16 小时 50 分钟前
我目前没什么想换的 都说发热严重
ioschina1 15
ioschina1 16 小时 49 分钟前
等着换米 12 吧,小米虽然不完美,综合还是没有比小米强的
starlz 16
starlz 16 小时 44 分钟前
@ioschina1 #15 小米 11 翻车这么狠,有点不敢上了
SenLief 17
SenLief 16 小时 34 分钟前
目前还在用 mate20pro,发现没什么换的必要,有信号有信号,要续航有续航,其他的需求都不算主力需求。
james2013 18
james2013 16 小时 31 分钟前
上一部手机小米 mix2s,现在手持小米 10.
曾经小米 mix2s 升级版本后,发现耗电快,王者荣耀不时 460,就退回旧版本了.
现在小米 10 版本为 miui12.0.8,出厂的版本,没有乱点,卡死等严重现象,有 2 个小 bug,建议刷回旧版试下
starlz 19
starlz 16 小时 29 分钟前
@james2013 #18 巧了,我上一步也是 mix2s
liliclinton 20
liliclinton 15 小时 7 分钟前
@BBCCBB 是的没错,不过又没有什么明星代言的溢价,那又有什么问题呢
dejavv 21
dejavv 15 小时 0 分钟前
主要想换个带红外的手机
loveanaminio 22
loveanaminio 14 小时 56 分钟前 via iPhone
别买小米就好
xiaoz 23
xiaoz 14 小时 5 分钟前 via Android
手持小米 10s,除了内置很多第三方 app,以及广告问题。其它感觉还好。
MrTLJH 24
MrTLJH 14 小时 5 分钟前
一加、realme 、moto 、都可以考虑、都支持 google
马上一加和 realme 都是一个 OS 皮了,就主要看性能和卖点,realme 较高
性价比*高的还是 moto edge 、缺点就是 os 皮的本地化不足、但同样也是优点
个人觉得 miui 太重了,增加了耗电和出 bug 的可能性、还有就是广告特多
TypeError 25
TypeError 14 小时前
三星不把小屏 2k 加回去 不推荐买
shuntdown42 26
shuntdown42 13 小时 49 分钟前
其实直接买一加就行,解锁方便 rom 也多,但等 895 出了之后再买比较好
cheng6563 27
cheng6563 13 小时 38 分钟前 ❤️ 1
一加那系统是真的一言难尽
luomu24 28
luomu24 11 小时 56 分钟前
我魅族连提名都不配吗??
jdhao 29
jdhao 11 小时 42 分钟前 via Android
说 MIUI 广告多的,我都懒得驳斥了。。至少和 OPPO vivo 是同一水平的。但是 OPPO vivo 系统的实用性比不上小米的系统。
angkec 30
angkec 11 小时 39 分钟前
@rpish R2 可惜太宽了 用着手疼。。。
YUX 31
YUX 11 小时 34 分钟前
pixel 6
YaakovZiv 32
YaakovZiv 11 小时 30 分钟前
当前用的 mate20,不知道它啥时候能坏掉,让我有机会换个新的手机,背部指纹体验感到难受,侧面指纹也是难受,这两种指纹的手机我都有,正面屏下指纹*适合我。对比了同事的 mate40,感觉也比较耐用,满足生活需求了,工作用的话就有些浪费资源了,荣耀那种 2k 左右的足够工作使用
dingwen07 33
dingwen07 11 小时 22 分钟前
Google Pixel 6
IvanLi127 34
IvanLi127 11 小时 5 分钟前 via Android
我也想说下,我的上一部是 mix2s,现在 10s,还行吧,就是广告是真的多
metrotiger 35
metrotiger 10 小时 57 分钟前
个人感觉鸿蒙挺好用的
Yorkzhu 36
Yorkzhu 10 小时 53 分钟前 via Android
@YaakovZiv mate40 没办法安装 Google 服务吧
0o0o0o0 37
0o0o0o0 10 小时 17 分钟前
oppo 的:一加 realme
华为的藕断丝连:荣耀
魅族
vivo 的:iqoo
小米的:黑鲨
中兴的:努比亚的:红魔
ghostwwg 38
ghostwwg 10 小时 16 分钟前
OV 产品力上来了
Fixedsys 39
Fixedsys 8 小时 54 分钟前
手持 Realme GT Neo 没啥不好的,自带 GMS,google 的软件直接安装。也不耍猴。
uqf0663 40
uqf0663 8 小时 53 分钟前
我之前 ov 黑,但是后来上了*代 nex 就真香了,综合用下来,系统功能小细节完善度方面 o 比 v 好,ui 好看方面 v 比 o 好,硬件两家都差不多。玩机圈很不待见 ov 其实是偏见。
fatelight 41
fatelight 5 小时 15 分钟前
别买小米, ov 的 coloros 现在都比 miui12 好

看谁买小米奇迹
fatelight 42
fatelight 5 小时 13 分钟前
@jdhao 比不上 miui12 的 bug 多吧,10u 受害者,3 个 120 吹的什么样子,体验一团糟
buddha 43
buddha 2 小时 51 分钟前
买 android 手机我的首选要求就是要有 google 全家桶的, 小米 /红米有些在升级 MIUI12.5 就没有了, 其他牌子也怕有类似.
所以在用了多年 android 手机以后 换成 iphone , iphone 用 google 系列软件反倒是不需要担心了.
fox0001 44
fox0001 1 小时 37 分钟前 via Android
没看到米粉出来反驳,奇迹啊[狗头]
yongliang 45
yongliang 1 小时 20 分钟前
小米手机用开发版 MIUI,比稳定版好用。
我也是小米 10,曾经有段时间感觉比我刚换下去的魅族 16X 都卡,后来升级了开发版,发现这才是该有的样子。
haiironezumi 46
haiironezumi 1 小时 17 分钟前 via iPhone
想问问除了 pixel 外还有那个厂的手机能和 stock android 的发布进度同步?
cmdOptionKana 47
cmdOptionKana 1 小时 17 分钟前 via Android
@fox0001 米粉也想知道可以换什么
MeatIndustry 48
MeatIndustry 1 小时 14 分钟前 via iPhone
抓个别字:下一“部”
lushifu 49
lushifu 58 分钟前 via Android
现在用的还是日版的 Mate 20 Pro,非常好用?谁叫日本市场安卓机拉跨的多呢
骁龙 898 据说还是三星代工?我还是等下半年的 898 Plus 吧,说不定是台积电代工呢
Lefi 50
Lefi 56 分钟前
说实话,安卓机里面*值得买的就是 三星 索尼
xuromky 51
xuromky 53 分钟前
@yongliang 就是开发版要保持社区活跃度,但是平常上班带娃哪有时间在社区刷,结果被踢出内测组了,后面就一直稳定版用着算了,唉一言难尽
anguiao 52
anguiao 53 分钟前
换 iPhone 了,等着看年底的高通芯片怎么样。如果好的话入个米 12,不好的话就继续用米 10 Pro 了。
xuromky 53
xuromky 49 分钟前
现在想着下一部手机买三星,而且几乎都是满帧运行,几乎不存在锁帧现象

而且种草 oneui 的高度定制和可玩性

但是好像很多人说经常掉帧卡顿。。。国行动画不流畅。。

也是纠结的雅痞
mrz3333 54
mrz3333 48 分钟前
这两年用了几个安卓,预算够还是上水果 pm 吧。
p1gd0g 55
p1gd0g 22 分钟前
等等 pixie6.
opentrade 56
opentrade 21 分钟前
我还挺喜欢 VIVO,2000 块以下那种,不喜欢苹果系统,留着 SE 测试用。
kongxiao00532 57
kongxiao00532 15 分钟前
从红米 note3 到现在小米 11,中间也换过 iPhone,无奈的发现小米还是更合适一些。自己对 MIUI 还是很满意的,换了 iPhone 以后发现广告来源主要是推送和开屏广告,这个 MIUI 和 iOS 没什么区别,系统设置里关闭广告、关闭不需要的通知权限、再装个自动跳过开屏广告的 App 平时就不存在广告困扰。去年用了一段时间的 iPhone,广告不少,双卡信号贼差,iOS 也一样有 bug,还缺少很多例如小窗、遥控等等的小功能,还是换回了米 11 。小米 11 八月份烧了主板换了新,幸好现在安卓的云同步可以备份微信聊天记录。反正 5 年小米用户感觉小米真的没有网上讲的那么不堪,虽然 888 是真的热。
feitxue 58
feitxue 11 分钟前
虽然 ov 请明星厉害,但是线下机溢价高啊,实体店比主推互联网售卖同配置贵三四百都算少的了.
有供应链的朋友微信群讲过,代工厂做出来 ov 的质量其实相比小米是更好一点的.
所以,虽然 ov 线下售卖智商机多,再加上你认为请明星代言抽成多,其实没你想象的那么差.
结论,ov 对应的互联网品牌 一加 realme 等品控还是可以放心的.
x66 59
x66 9 分钟前
有时候失去了才知道珍惜,到头来看华为确实是安卓阵营*对的 No1
Cloud9527 60
Cloud9527 9 分钟前
@kongxiao00532 主板都烧了,还不砍呢
inhons 61
inhons 8 分钟前
好几年了一直 Pixel
yafoo 62
yafoo 8 分钟前 via Android
屏幕乱点,应该是屏幕硬件问题,我这个 vivo x50,去年刚买一周,左下角一个地方会自己乱点,去卖家那恢复系统后好了,后来出现过几次,恢复系统或升级系统会好,今年 8 月份,又开始乱点,持续了一个月,升级系统也没用,*后去售后那换了屏幕,现在好了,不知道以后还会不会出问题
GiantHard 63
GiantHard 7 分钟前
红米要出新机了
zhoushengyue 64
zhoushengyue 7 分钟前
三星 S22 吧,据说是细版的四边等宽+居中挖孔,颜值无敌,还能阉割掉 888 上那颗超大核,日常用应该发热不会那么大了,OneUI 年底就上 Android 12 了,还有 Material You 新设计风格,我准备如果 iPhone 14 不合意的话就上 S22 了
ww2000e 65
ww2000e 7 分钟前
刚买的 iqoo… vivo 旗下的,vivo 自己开发的车载挺好用的,接近 carplay 了,系统自带 app 也能关流量和通知,达到我要求了
dcty 66
dcty 5 分钟前
@ww2000e #65 这个车载指的是什么?目前有哪些车型支持了。

MIUI 的手机目前有啥推荐的吗?

MIUI 的手机目前有啥推荐的吗?

k30s 至尊纪念版、k40、还是即将要发布的 k40s?

 

sxox · 2 天前 · 7382 次点击

第 1 条附言  ·  2 天前

看大家在用的有 k40 和 mi10s,我再看看

145 条回复    2021-10-13 17:18:40 +08:00

1  2   
ioschina1
    101

ioschina1   2 天前

@archiyuan 应用双开不叫系统分身。
系统分身的功能可以参考 8848 的广告语:
一部手机,两个密码,两个空间,分别存储,互不干扰,8848 钛金手机。
生活才能会工作,8848 钛金手机,双密码,双空间,工作生活分别存储,互不干扰。

比如你如果拿个 8848,周围的人都会怀疑你手机里有很多小秘密,但是 MIUI 有 8848 宣传的卖点功能,你的小秘密只有你自己知道

jntitor
    102

jntitor   2 天前

看起来 civi 不错 其他的都太重了
lscexpress
    103

lscexpress   2 天前

选 k40,我手持小米 8 下部就换 k40,因为 888 处理器太拉胯了所以选择次旗舰。
daviddeng
    104

daviddeng   2 天前

@jdhao 个人感觉可以观望一下反馈,等 MIUI 反馈好点再买
user1121114685
    105

user1121114685   2 天前 via Android   ❤️ 1

只有我建议用 k40 游戏增强版吗? 1 可刷印度固件,2 电池大,3 充电快,4 信号好。5nfc 红外都有。而且天机 1200 性能也够用。简直日用强的一逼呀!
user1121114685
    106

user1121114685   2 天前 via Android

还有一点,解锁不用等 168 个小时。哈哈哈
Torpedo
    107

Torpedo   2 天前

10s,除了重,其他还好
Huelse
    108

Huelse   2 天前

k30s 至尊纪念版在用,一代神 u865+5000 毫安的电池,真的一充一天,有时候能用 2 天,不完游戏不看视频。好像只有线下还有货
archiyuan
    109

archiyuan   2 天前

@ioschina1 我什么时候说应用分身=系统分身了?
archiyuan
    110

archiyuan   2 天前

@user1121114685 刷印度固件有哪些优点啊?
yaojin
    111

yaojin   2 天前

为啥这么多人黑小米, 我觉得挺好用的啊, 经济实惠, 用的 k30pro, 满足日常使用, 现在二手也就 1000 多一点, 不像以前用 iphone 小心翼翼的使用, 现在手机摔了也不心疼, 哈哈, 喜欢 miui 的系统, 真的非常符合国人的使用, iphone 的系统的确好, 但是很多功能的设计都是考虑国外的用户习惯的, 不过 miui 的确有时候有点 bug, 但是不至于没法使用, 而且出现 bug 的几率很低, 不知道为啥这么多人黑, 特别是 B 站, 不知道是不是请的水军
FawkesV
    112

FawkesV   2 天前

@Huelse 就是太重了 我用的也是这个 其他的感觉啥都好 就是重
yeqizhang
    113

yeqizhang   2 天前 via Android

手持 k40 半年,感觉还行吧,12gb 用起来很爽。希望还能继续强势用上三年。
Linon
    114

Linon   2 天前 via Android

k30s
Awes0me
    115

Awes0me   2 天前

@user1121114685

为啥不用等 168 ?

Aaron01
    116

Aaron01   2 天前 via Android

k20pro 用了 2 年多了,没发现什么 bug
az22c
    117

az22c   2 天前

@Huelse 平时中午吃个饭 提个手机太重了
wenjiu
    118

wenjiu   2 天前

供参考:手上有台红米 10x 5g,miui12.5 将近半年多没推送新系统了,目前*新版本 wifi 断流严重(很多人有此 bug 而且都被反应烂了没人处理),官方论坛还有很多人反应别的各种小毛病,得不到处理。
目前百度上搜红米 10x 5g 依然只能搜到各种推荐,性价比之王,怀疑删评论严重。

不知道是因为不是旗舰机没人权还是因为各个机器体质不一样。

amirobotics
    119

amirobotics   2 天前   ❤️ 1

我曾经看到其他人投诉 MIUI bug,都认为是黑粉。

直到我遇到这些 miui bug 后才深刻体会。

比如 notification,

1. 老板通过 WhatsApp 催工作进度。
2. 老母亲通过短信慰问。
3. 各位大佬在 telegram 发讯息。

*后会看到一个通知是:“老板 whatsapp 的头像”+“老母亲的电话号码”+“telegram 的讯息”。

没错,whatsapp,telegram,message 的通知全都搞砸了,都混在一起,差不多 2 个月多的时间才要修复。真的非常影响体验,基本生活都搞砸了,分不清谁是谁。

此外,还有 notification bubble 的 bug,launcher 在 6 inch 的屏幕里,只能有 3 inch 的操作界面。

MIUI 广告那些的都是小问题,我能手动解决。但是那些 bug 的修复速度让我觉得,下一台电话不会是小米了。

*后想说,MIUI 有 bug,顶多影响体验。但雷军造车,刹车如果失灵,后果可是人命。MIUI 都做不好,还想造车?倒不如直接造宇宙飞船。

zpxshl
    120

zpxshl   2 天前 via Android   ❤️ 2

@yaojin 为什么这么不喜欢小米呢。119 楼就是一个例子。你没遇到的问题不代表别人没遇到,正常反馈问题总被怀疑是水军或者黑粉。
就这质量还怀疑被水军黑,真是相当自信。 就 miui 这质量,几年前就 bug 满天飞了,反馈渠道还失灵。
tanranran
    121

tanranran   2 天前

有一说一,多年 MIUI 的粉,手持小米 10 pro 512G 版本,发热真的是越来越严重,服了
mengqingshuise
    122

mengqingshuise   2 天前

@AKAMichael 我说怎么我的谷歌账号登不上,原来是升级系统的事。
Huelse
    123

Huelse   2 天前

@FawkesV #112
@az22c #117
的确重,毕竟 216g,个人觉得不用手机壳会舒服点

现在看 13pro 也有 203g,就还好

bigwhite
    124

bigwhite   2 天前   ❤️ 1

bilibili 有一个吐槽小米 11 的视频火爆了,我以为不会有人推荐小米 11 呢。。
superBearL
    125

superBearL   1 天前

为什么想不开呢,建议看看 B 站《小米圣经》
rexmann
    126

rexmann   1 天前

k30s 在手,除了重一点没太多问题,也没遇到多少 bug,但是*近有点发热,不知道是因为动态桌面还是 5G 的原因
zkhhkz123
    127

zkhhkz123   1 天前

@sxox P50 标准版是直屏的 其他配置也有大杯水准 可惜是 4G
user1121114685
    128

user1121114685   1 天前 via Android

@archiyuan 无广告,全套谷歌框架,稳定些,安装软件什么的骚扰也少
user1121114685
    129

user1121114685   1 天前 via Android

@Awes0me 因为 mtk 的 cpu 可以强解 bl 。
Garphy
    130

Garphy   1 天前

现在还真不好说,手持 K20P,感觉还能用蛮久,就是存储买小了 256 后面可能不太够。
手机主要还是得有个合适的 U,一代神机米 6 835,K20p 855,都是 U 比较均衡才能持久。
888 目前感觉还是不太行,等等吧,手机换代太快了。
DianQK
    131

DianQK   1 天前

手持小米 11,线下看了 civi,感觉真不错想换个
Awes0me
    132

Awes0me   1 天前 via iPhone

@user1121114685 怎么强解,搜了下都要给钱
wanwaneryide
    133

wanwaneryide   1 天前

@mikeven 小爱 会经常无缘无故的抽风,自己唤醒,突然来一声:我在
wanwaneryide
    134

wanwaneryide   1 天前

垃圾 k30u 放裤子口袋,屏幕朝大腿的。经常触发误触,各种屏幕截图、拍照、录像、拨号啥的,搞得手机发烫。B 站 app 全屏的时候,有几率出现半屏幕显示,另外半屏幕全部黑掉。APP 任何操作都无法点击,无法返回啥的。只能返回主页,把 APP 强制结束才行。
sxox
    135

sxox   1 天前

@wanwaneryide 垃圾 k30u 就不提了,是我用过寿命*短的手机
deletemyself
    136

deletemyself   1 天前

等等 k40s,k40 拍照太拉、有点大 就退了
u21t20o15
    137

u21t20o15   1 天前

小米 10s
q1angch0u
    138

q1angch0u   1 天前

一个月前买了个 k40,系统里居然 tmd 有自带广告。。。不想忍,7 天无理由了。 [我知道可以关,但我就压根不想让它存在。]
shareSK
    139

shareSK   1 天前

选新不选旧。虽然我用 k30p 确实舒服毕竟是真全面屏。看着爽,但是没得高刷,以及重。其他的都很舒服。
liaotuocn
    140

liaotuocn   1 天前

建议 K40 小米热度这么高嘛
billie
    141

billie   1 天前 via Android

鸿蒙 os 情绪稳定
zzugyl
    142

zzugyl   23 小时 45 分钟前

K40s 应该会出 870 888 和天玑 1200 的版本,这个选择范围就多了。
三不加广告的魅族,已经后悔了。MIUI 广告至少是可以关闭的。
qwertqwert12345
    143

qwertqwert12345   20 小时 51 分钟前

ADUI 还有人买啊,解 BL 还要等 7 天,根本不买

推荐一加,国内就这个能随意解 BL 锁了

epson3333
    144

epson3333   19 小时 0 分钟前

@qwertqwert12345 大氢都没了,不买一加了
lavenderkissyou
    145

lavenderkissyou   16 小时 43 分钟前

手持小米 8 透明探索版,我不打游戏,感觉挺好用的,用了三年还很流畅

有阅读类 app 针对 ltpo 做优化吗

想知道有阅读类 app 针对 ltpo 做优化吗,比如停止滑动时瞬间帧数掉落到 1hz 这样的

 

zxxufo008 · 2 天前 · 1273 次点击

16 条回复    2021-10-13 16:51:29 +08:00

AoEiuV020
    1

AoEiuV020   2 天前

没用过 ltpo,但非游戏的普通应用,难道不是默认情况画面静止时本就会掉到 1hz 的吗,
wanwaneryide
    2

wanwaneryide   2 天前

@AoEiuV020 不是说苹果就这样的么。安卓貌似不行,都是固定的刷新率。偶尔会根据 APP 不同会有些变动。
wunonglin
    3

wunonglin   2 天前

苹果不是*低 10hz 么。安卓现在好像没有动态刷新率的机子吧?
zxxufo008
    4

zxxufo008   2 天前   ❤️ 1

@wunonglin 有的啊,四款,三星 note20ultra s21ultra 一加 9pro oppo find x3 pro
mxT52CRuqR6o5
    5

mxT52CRuqR6o5   2 天前 via Android

@AoEiuV020 要 app 主动适配的吧,总不能通过像素判断内容变不变吧
Cheons
    6

Cheons   2 天前 via Android

之前测试三星 s21u 动态调整静止画面回到 60hz
zxxufo008
    7

zxxufo008   2 天前

@Cheons 你自己的机子吗,我看有人说这个不能通过软件看,必须要别的硬件检测才行。。
AoEiuV020
    8

AoEiuV020   2 天前   ❤️ 1

@mxT52CRuqR6o5 不需要的,系统能监控每个控件是否有更新绘制的,和像素无关,
这点可以试试打开开发者模式里的“显示视图更新”看看效果,系统是知道哪里什么时候有变化的,

哪怕一个像素都没有变,只要控件调用了刷新,系统就会知道要渲染新的帧,
反过来肯定可以做到一个控件都没有刷新的情况下系统自动降低帧数到 1,

Cheons
    9

Cheons   2 天前 via Android   ❤️ 1

https://z3.ax1x.com/2021/10/11/5VsSxA.jpg
s21u *低能设置成 10hz 但动态*低只能 60
s21 *低能设置 40+ 动态*低只能 60
换 s21 了 我设置的稳定 120
Cheons
    10

Cheons   2 天前 via Android

@Cheons 设置的稳定 120

截图默认跌到 60

wsseo
    11

wsseo   2 天前

体验*好的是总是保持 120HZ,为了省电耗费太多精力不划算。
F0nebula
    12

F0nebula   1 天前

1+ 9 pro 用 scene4 可以看到*低约 1 帧
F0nebula
    13

F0nebula   1 天前

@F0nebula #12 对了是 LineageOS
zxxufo008
    14

zxxufo008   23 小时 41 分钟前

@F0nebula 省电吗
F0nebula
    15

F0nebula   23 小时 31 分钟前

@zxxufo008 #14 没感觉 毕竟这是块 2K + 120 Hz 的屏幕 而且 888 也是耗电大头
beijiaoff
    16

beijiaoff   17 小时 8 分钟前

阅读类 app 只要按照苹果开发手册使用苹果提供的 UI 框架,就可以享受到这种特性。*低 10hz 。

安卓开发者模式经常被自动关闭

安卓开发者模式经常被自动关闭

 

ImJoeHs · 1 天前 · 1634 次点击

手里只有一台测试机,小米 MIX2S,MIUI 12.5.1 稳定版

日常开发调试并不频繁,经常在需要调试的时候发现开发者模式被关闭了,不得不重新找入口连击系统版本开启; 目前不太清楚的是:

  1. 这是 MIUI 还是 安卓的 feature
  2. 自动关闭的触发逻辑是怎么样的,重启 or 定时器?
  3. 有没有任何方式可以禁止自动关闭,保持开发者模式+usb 调试永远开启

19 条回复    2021-10-13 09:55:43 +08:00

WebKit
    1

WebKit   1 天前   ❤️ 2

MIUI 上没发现。OPPO 手机上倒是常见
binbin0915
    2

binbin0915   1 天前

realme iqoo ov 会的….
littlefishcc
    3

littlefishcc   1 天前   ❤️ 2

miui 手机管家不要点击立即优化就可以,就不会自动关闭开发者模式。
janus77
    4

janus77   1 天前   ❤️ 1

用手机管家一键优化就会给你关了
zpxshl
    5

zpxshl   1 天前

oppo 会,华为不会。
ragnaroks
    6

ragnaroks   1 天前

应该是定制 UI 的设定,我用中兴的几个机器都是重启后关闭调试
Rheinmetal
    7

Rheinmetal   1 天前

定制 ui 防止普通用户被入侵的 feature 而已
nicevar
    8

nicevar   1 天前

这不是 bug, 是为了手机安全
Helsing
    9

Helsing   1 天前 via iPhone

OPPO 会,非常恶心
Cielsky
    10

Cielsky   1 天前 via Android

手机管家做了什么优化?
我没用过手机管家,刚看了下发现开发者模式没关
chengyiqun
    11

chengyiqun   1 天前

@Cielsky 应该说的是锁屏清理内存和手动清理内存, adb 守护进程可能也会被杀.
RanKaede
    12

RanKaede   1 天前

说起来开发者模式有手动关闭的方法么?
IvanLi127
    13

IvanLi127   1 天前 via Android

同机型没遇到过
chenyu0532
    14

chenyu0532   1 天前

vivo 会在顶栏一直闪那个 开启开发者模式手机变危险 ,一直一直一直闪。。很恶心
yujiang
    15

yujiang   1 天前 via Android

开发版没遇到过,稳定版好像点那个安全中心优化就会给你改回来
ysc3839
    16

ysc3839   1 天前 via Android

@chengyiqun 进程被杀按理来说不应该影响开关状态。
rickc137
    17

rickc137   1 天前

别用手机管家优化,我之前这机型就是这样被关掉的。。。
leeyuzhe
    18

leeyuzhe   1 天前

原生肯定没有这个机制
lostpg
    19

lostpg   1 天前 via Android

有一个“停用 adb 授权超时功能”,不知道你的手机有没有,有的话需要勾上

手机系统应用的权限有什么管理办法吗

手机系统应用的权限有什么管理办法吗

 

mirrorside · 10 小时 50 分钟前 via Android · 312 次点击

手持三星 s20+,权限一直在用 appops 管理,一般下载的 app 除了必要权限基本都是关闭,今天突然想起我权限设置里一直都是选的不显示系统应用,打开一看,一个权限至少有几十个上百个系统应用正开启着呢

问题来了,除了一些名字上一看就知道用不上某些权限的系统应用,*大部分系统应用我完全不熟悉,没法下手管理。。。这咋整

6 条回复    2021-10-14 09:50:16 +08:00

SenLief
    1

SenLief   10 小时 47 分钟前 via Android

换手机
mirrorside
    2

mirrorside   10 小时 46 分钟前 via Android

@SenLief 这 个人觉得是个手机应该都会有这问题
dingwen07
    3

dingwen07   10 小时 43 分钟前

操作系统要获取权限不要太简单。
不过你可以阅读你使用的操作系统的隐私政策。
mirrorside
    4

mirrorside   10 小时 41 分钟前 via Android

@dingwen07 算了。。几百个系统应用基本不可能管理的了了。。主要是这次不小心打开了系统应用的权限显示一下子搞得我强迫症犯了。。

想了想还是把这个显示关掉当作不存在吧。。。

SenLief
    5

SenLief   1 小时 2 分钟前 via Android

@mirrorside 权限问题确实 ios 好些
Karonheaven
    6

Karonheaven   5 分钟前

如果不想解锁 BL 刷第三方系统的话,基本上内置程序都有点隐私毛病
或许可以试试在设置里面禁用一些用不上的内置应用,或者用 IceBox 冻起来( MIUI 可以禁用,不知道三星是否可以)

等 windows 11 开始正式支持 android app

等 windows 11 开始正式支持 android app 了,是不是可以把国内各种毒瘤转移到这个官方的安卓环境了

 

AndyLuo · 16 小时 52 分钟前 · 1903 次点击

现在把各种国内程序全部放在 vmware 的虚拟机里面,电脑倒是没有性能负担,但要说不臃肿那是骗人的,而且如果 windows 虚拟机开着我这边还会导致看视频音视频不同步。 等正式支持 android 了,像什么 qq 、微信这种是不是就不用单独再开个虚拟机了,资源占用也会少许多

23 条回复    2021-10-14 09:42:08 +08:00

sprite82
    1

sprite82   16 小时 44 分钟前

没理解,qq 微信不是有电脑版的吗?为什么要用 win11 搞安卓版,你在安卓子系统上登陆了,手机上就无法在线了。就算为了防止窃取隐私,等你手机重新登录 不还是会继续窃取?
raysonx
    2

raysonx   16 小时 44 分钟前   ❤️ 6

先预测一波:毒瘤会检测虚拟机,禁止在非手机上运行。
whenov
    3

whenov   16 小时 41 分钟前

感觉可能性不大。初期会遇到各种兼容性问题,中后期则会被针对性屏蔽。希望被打脸
itechnology
    4

itechnology   16 小时 37 分钟前

估计会被针对性屏蔽,我记得某些 APP 在安卓模拟器上是服务正常运行的。
alexkkaa
    5

alexkkaa   16 小时 35 分钟前 via Android

这玩意就一个虚拟机而已 你拿个模拟器试试有几个不是屏蔽了
yunyuyuan
    6

yunyuyuan   16 小时 34 分钟前

产品是根据需求来的,你首先要保证大部分人都觉得毒瘤是“毒瘤”,就和手机摄像头一样,我不喜欢那么多摄像头,但是我毕竟不是多数
ruixue
    7

ruixue   16 小时 30 分钟前   ❤️ 1

可以联动一下刚发的新鲜的帖子:
“微信因为『使用微信外挂、非官方客户端或模拟器』被限制登录” /t/807568
所以还是不要太乐观了
coderluan
    8

coderluan   16 小时 29 分钟前

比起模拟器, 这个其实可以参考 m1 电脑运行手机 app 的情况.
blueboyggh
    9

blueboyggh   16 小时 24 分钟前 via Android

国产软件对你电脑造成的性能负担,比开虚拟机还大吗?
YUX
    10

YUX   16 小时 23 分钟前   ❤️ 1

用安卓手机的 work profile 是目前*完美的方案
https://play.google.com/store/apps/details?id=com.oasisfeng.island
goodhellonice
    11

goodhellonice   16 小时 21 分钟前

@coderluan #8 想问一下 m1 运行 app 现在效果如何?
GiftedJarvis
    12

GiftedJarvis   16 小时 17 分钟前

@sprite82 Win 平台的 QQ 前几天被爆出会扫描用户所有浏览器的历史记录和部分与 QQ 无关的用户个人文件
AndyLuo
    13

AndyLuo   15 小时 55 分钟前   ❤️ 1

@yunyuyuan 事实是大部分人也并不觉得这些大厂国产程序是毒瘤,认为毒瘤可能仅限于搞程序或技术还不太嫌麻烦的人。(例如 v2 或其他科技 /技术网站
sprite82
    14

sprite82   15 小时 3 分钟前

@GiftedJarvis 这个比较久了吧,我记得改了的,不过我现在主要是用火绒限制他们访问无关目录
j421037
    15

j421037   14 小时 56 分钟前

我怎么觉得楼主有点脑残 WIN11 跑你说的这些安卓版应用有什么意义
aLazarus
    16

aLazarus   14 小时 6 分钟前

@goodhellonice app store 商店的部分应用,比如饿了么会闪退,如果用触控板的话,体验良好
FrankAdler
    17

FrankAdler   10 小时 15 分钟前

你装个 Sandboxie 吧,把毒瘤软件跑在沙盒里就行了,我目前在里面跑 QQ,迅雷都没啥问题
dingwen07
    18

dingwen07   6 小时 19 分钟前

我倒是更期待它们处 Linux 版,然后把它们关进 WSLg 里面去
dingwen07
    19

dingwen07   6 小时 18 分钟前

@goodhellonice #11 *大多数国产流氓软件都从 MAS 移除了,无法安装。
cathedrel
    20

cathedrel   5 小时 40 分钟前

@YUX 这玩意*好的地方就在于可以完全冻结这个 work profile,里面所有的 APP 都不再运行了,等于一个官方大冰箱,适合不能 root 的手机,但是,work profile 并不能阻止毒瘤们获取手机的关键信息,比如 IMEI 等等
fucku
    21

fucku   1 小时 42 分钟前

@FrankAdler #17 QQprotect 用 sandboxie 怎么搞?
goodhellonice
    22

goodhellonice   20 分钟前

@dingwen07 #19 好的 谢谢。。。
Vegetables
    23

Vegetables   几秒前 via Android

等正式出来并且修复 AMD 负优化再更新 Win¹¹

Android开发用过的十大框架

Android开发用过的十大框架

 

本文系多方综合与转载整合,意在Android开发中能够知道和使用一些好用的第三方支持,省去自己的很多时间,下面涉及到的多为经过历史兴衰与检验的,江山代有人才出一代更比一代强,有些已经被更新更好用的所取代,但也很多地方仍可圈可点不乏参考,有些依然经典,整理出来请君一参.欢迎大家的指正,补充与交流.

1、AndBase框架

项目地址: https://code.jd.com/zhaoqp2010_m/andbase

1.andbase中包含了大量的开发常用手段。

如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片文件下载上传,Http请求工具,常用工具类(字符串,日期,文件处理,图片处理工具类等),能够使您的应用在团队开发中减少冗余代码,很大的提高了代码的维护性与开发高效性,能很好的规避由于开发疏忽而导致常犯的错误。

2.andbase封装了大量的常用控件。

如list分页,下拉刷新,图片轮播,表格,多线程下载器,侧边栏,图片上传,轮子选择,图表,Tab滑动,日历选择器等。

3.强大的AbActivity,您没有理由不继承它。

继承它你能够获得一个简单强大可设置的操作栏,以及一系列的简单调用,如弹出框,提示框,进度框,副操作栏等。

4.提供效率较高图片缓存管理策略,使内存大幅度节省,利用率提高,效率提高。

程序中要管理大量的图片资源,andbase提供简单的方法,几步完成下载与显示,并支持缩放,裁剪,缓存功能。

5.封装了大量常见工具类。

包括日期,字符,文件,图片等各种处理函数, 多而全。

6.用andbase大量减少handler的使用,而采用回调函数,代码更整洁。

handler会产生大量代码,并且不好维护,andbase对handler进行了封装。

7.简单轻量支持注解自动建表的ORM框架(支持一/多对多的关联操作)。

写sql,建表,工作量大,andbase提供更傻瓜异步增删改查工具类。

8.异步请求http框架,网络请求标准化,支持文件上传下载,get,post,进度显示。

包含了异步与http请求的工具类,实用。

 

2、XUtil框架

项目地址:https://github.com/wyouflf/xUtils

主要有四大模块:

(1) 数据库模块:Android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
(3) 网络模块:支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
(4) 图片缓存模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…

3、ThinkAndroid框架

项目地址:https://github.com/white-cat/ThinkAndroid
主要有以下模块:
(1)  MVC模块:实现视图与模型的分离。
(2)  ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
(3)  数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
(4)  http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
(5)  缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
(6)  图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
(7)  配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
(8)  日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
(9)  下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、删除等等。
(10) 网络状态检测模块:当网络状态改变时,对其进行检

 

4、LoonAndroid

项目地址:https://github.com/gdpancheng/LoonAndroid
主要有以下模块:
(1)  自动注入框架(只需要继承框架内的application既可)
(2)  图片加载框架(多重缓存,自动回收,*大限度保证内存的安全性)
(3)  网络请求模块(继承了基本上现在所有的http请求)
(4)  eventbus(集成一个开源的框架)
(5)  验证框架(集成开源框架)
(6)  json解析(支持解析成集合或者对象)
(7)  数据库(不知道是哪位写的 忘记了)
(8)  多线程断点下载(自动判断是否支持多线程,判断是否是重定向)
(9)  自动更新模块
(10) 一系列工具类

5、volley

项目地址 :https://github.com/smanikandan14/Volley-demo
(1)  JSON,图像等的异步下载;
(2)  网络请求的排序(scheduling)
(3)  网络请求的优先级处理
(4)  缓存
(5)  多级别取消请求
(6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)

6、android-async-http

项目地址:https://github.com/loopj/android-async-http
文档介绍:http://loopj.com/android-async-http/
(1) 在匿名回调中处理请求结果
(2) 在UI线程外进行http请求
(3) 文件断点上传
(4) 智能重试
(5) 默认gzip压缩
(6) 支持解析成Json格式
(7) 可将Cookies持久化到SharedPreferences

7、Afinal框架

项目地址:https://github.com/yangfuhai/afinal
主要有四大模块:
(1) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。
(3) 网络模块:通过httpclient进行封装http数据请求,支持ajax方式加载,支持下载、上传文件功能。
(4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,
没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),
更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,
在imageview显示图片的时候播放动画等(默认是渐变动画显示)。

总结框架结构,

ImageLoader框架(第8大框架)

 

UniversalImageLoader是用于加载图片的一个开源项目,在其项目介绍中是这么写的,

  • 支持多线程图片加载
  • 提供丰富的细节配置,比如线程池大小,HTPP请求项,内存和磁盘缓存,图片显示时的参数配置等等;
  • 提供双缓存
  • 支持加载过程的监听;
  • 提供图片的个性化显示配置接口;
  • Widget支持(这个,个人觉得没必要写进来,不过尊重原文)

其他类似的项目也有很多,但这个作为github上著名的开源项目被广泛使用。第三方的包虽然好用省力,可以有效避免重复造轮子,但是却隐藏了一些开发上的细节,如果不关注其内部实现,那么将不利于开发人员掌握核心技术,当然也谈不上更好的使用它,计划分析项目的集成使用和低层实现。

 

开源框架android-async-http(第9大框架)

官网:https://github.com/loopj/android-async-http

Android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也简单,详细请看官网:

到官网下载zip包,解压,里面有完整的代码和各种版本的jar包和demo,源码在library里面,jar包在releases里面。项目更新速度很快,老版本的回调是一个普通类,*新版是一个接口。

 

KJFrameForAndroid框架(第10大框架)

参考:http://www.codeceo.com/article/android-orm-kjframeforandroid.html

KJFrameForAndroid是一款基于Android的ORM和 IOC应用开发框架,封装了很多Android开发中常用的功能,包括Android中对Bitmap的操作类库。KJFrameForAndroid的设计非常精简,利用KJFrameForAndroid,我们可以用*少的代码完成很多丰富的Android功能应用,为Android开发者节省许多不必要的开发时间。

KJFrameForAndroid总共分为五大模块:UILibrary,UtilsLibrary,HttpLibrary,BitmapLibrary,DBLibrary。

 

Android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也简单,详细请看官网:

到官网下载zip包,解压,里面有完整的代码和各种版本的jar包和demo,源码在library里面,jar包在releases里面。项目更新速度很快,老版本的回调是一个普通类,*新版是一个接口。

Android面试题整理

JAVA 相关

 

1.静态内部类、内部类、匿名内部类,为什么内部类会持有外部类的引用?持有的引用是this?还是其它?

 

静态内部类:使用static修饰的内部类

 

内部类:就是在某个类的内部又定义了一个类,内部类所嵌入的类称为外部类

 

匿名内部类:使用new生成的内部类

 

因为内部类的产生依赖于外部类,持有的引用是类名.this

 

2.Java中try catch finally的执行顺序

 

先执行try中代码,如果发生异常执行catch中代码,*后一定会执行finally中代码

 

3.equals与==的区别:

 

==是判断两个变量或实例是不是指向同一个内存空间 equals是判断两个变量或实例所指向的内存空间的值是不是相

 

4.Object有哪些公用方法?

 

方法equals测试的是两个对象是否相等

 

方法clone进行对象拷贝

 

方法getClass返回和当前对象相关的Class对象

 

方法notify,notifyall,wait都是用来对给定对象进行线程同步的

 

5.String、StringBuffer与StringBuilder的区别

 

String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象 StringBuffer和StringBuilder底层是 char[]数组实现的 StringBuffer是线程安全的,而StringBuilder是线程不安全的

 

6.Java的四种引用的区别

 

强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM 也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象

 

软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。

 

弱引用:具有弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收,一旦发现弱引用对象,无论当前内存空间是否充足,都会将弱引用回收。不过由于垃圾回收器是一个优先级较低的线程,所以并不一定能迅速发现弱引用对象

 

虚引用:顾名思义,就是形同虚设,如果一个对象仅持有虚引用,那么它相当于没有引用,在任何时候都可能被垃圾回收器回收。

 

7.介绍垃圾回收机制

 

标记回收法:遍历对象图并且记录可到达的对象,以便删除不可到达的对象,一般使用单线程工作并且可能产生内存碎片

 

标记-压缩回收法:前期与*种方法相同,只是多了一步,将所有的存活对象压缩到内存的一端,这样内存碎片就可以合成一大块可再利用的内存区域,提高了内存利用率

 

复制回收法:把现有内存空间分成两部分,gc运行时,它把可到达对象复制到另一半空间,再清空正在使用的空间的全部对象。这种方法适用于短生存期的对象,持续复制长生存期的对象则导致效率降低。

 

分代回收发:把内存空间分为两个或者多个域,如年轻代和老年代,年轻代的特点是对象会很快被回收,因此在年轻代使用效率比较高的算法。当一个对象经过几次回收后依然存活,对象就会被放入称为老年的内存空间,老年代则采取标记-压缩算法

集合、数据结构相关

1.你用过哪些集合类

数据结构中用于存储数据的有哪些

数组

数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;

链表

链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。

2.说说hashMap是怎样实现的

哈希表:由数组+链表组成的

当我们往HashMap中put元素的时候,先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(即下标),如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,*先加入的放在链尾。如果数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。

3.ArrayList,LinkedList的区别

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

4.ArrayList和Vector的主要区别是什么?

ArrayList 和Vector底层是采用数组方式存储数据

Vector:

线程同步

当Vector中的元素超过它的初始大小时,Vector会将它的容量翻倍,

ArrayList:

线程不同步,但性能很好

当ArrayList中的元素超过它的初始大小时,ArrayList只增加50%的大小

5.HashMap和 HashTable 的区别:

HashTable比较老,是基于Dictionary 类实现的,HashTable 则是基于 Map接口实现的

HashTable 是线程安全的, HashMap 则是线程不安全的

HashMap可以让你将空值作为一个表的条目的key或value

 

算法相关

1.排序算法和稳定性,快排什么时候情况*坏?

2.给*外层的rootview,把这个根视图下的全部button背景设置成红色,手写代码,不许用递归

算法原理:

Android的view视图是按树形结构分布,所以按树形结构遍历

循环判断每一层的ViewGroup元素,将其入栈;否则判断当前view是否是Button类实例,是则改写背景色

当前ViewGroup检查childView完成后,判断栈是否非空,取出栈顶元素ViewGroup重复步骤2直至栈为空。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void changeAllBtnBGColor(View view, int color) {
if (view == null || !(view instanceof ViewGroup))
return;
Stack m = new Stack<>();
while (view != null) {
ViewGroup tmpGroup = (ViewGroup) view;
int count = tmpGroup.getChildCount();
for (int i = 0; i < count; i++) { View child = tmpGroup.getChildAt(i);
if (child instanceof ViewGroup) m.add(child);
else if (child instanceof Button) { child.setBackgroundColor(color);
} }
if (m.isEmpty()) break;
else view = m.pop();
}
}

 

Thread、AsynTask相关

1.wait()和sleep()的区别

sleep来自Thread类,和wait来自Object类

调用sleep()方法的过程中,线程不会释放对象锁。而 调用 wait 方法线程会释放对象锁

sleep睡眠后不出让系统资源,wait让出系统资源其他线程可以占用CPU

sleep(milliseconds)需要指定一个睡眠时间,时间一到会自动唤醒

2.若Activity已经销毁,此时AsynTask执行完并且返回结果,会报异常吗?

当一个App旋转时,整个Activity会被销毁和重建。当Activity重启时,AsyncTask中对该Activity的引用是无效的,因此onPostExecute()就不会起作用,若AsynTask正在执行,折会报 view not attached to window manager 异常

同样也是生命周期的问题,在 Activity 的onDestory()方法中调用Asyntask.cancal方法,让二者的生命周期同步

3.Activity销毁但Task如果没有销毁掉,当Activity重启时这个AsyncTask该如何解决?

还是屏幕旋转这个例子,在重建Activity的时候,会回掉Activity.onRetainNonConfigurationInstance()重新传递一个新的对象给AsyncTask,完成引用的更新

4.Android 线程间通信有哪几种方式(重要)

共享内存(变量);

文件,数据库;

Handler;

Java 里的 wait(),notify(),notifyAll()

5.请介绍下 AsyncTask的内部实现,适用的场景是

AsyncTask 内部也是 Handler 机制来完成的,只不过 Android 提供了执行框架来提供线程池来

执行相应地任务,因为线程池的大小问题,所以 AsyncTask 只应该用来执行耗时时间较短的任务,

比如 HTTP 请求,大规模的下载和数据库的更改不适用于 AsyncTask,因为会导致线程池堵塞,没有

线程来执行其他的任务,导致的情形是会发生 AsyncTask 根本执行不了的问题。

网络相关

1.TCP三次握手

2.为什么TCP是可靠的,UDP早不可靠的?为什么UDP比TCP快?

TCP/IP协议高,因为其拥有三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。

UDP就没有了,udp信息发出后,不验证是否到达对方,所以不可靠。

但是就速度来说,还是UDP协议更高,毕竟其无需重复返回验证,只是一次性的

3.http协议了解多少,说说里面的协议头部有哪些字段?

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议;http请求由三部分组成,分别是:请求行、消息报头、请求正文。

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头

4.https了解多少

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

5.谈谈 HTTP 中Get 和 Post 方法的区别

GET – 从指定的服务器中获取数据,明文发送内容

POST – 提交数据给指定的服务器处理

1. POST请求不能被缓存下来

2. POST请求不会保存在浏览器浏览记录中

3. 以POST请求的URL无法保存为浏览器书签

4. POST请求没有长度限制

6.推送心跳包是TCP包还是UDP包或者HTTP包

心跳包的实现是调用了socket.sendUrgentData(0xFF)这句代码实现的,所以,当然是TCP包。

7.如何实现文件断点上传

在 Android 中上传文件可以采用 HTTP 方式,也可以采用 Socket 方式,但是 HTTP 方式不能上传

大文件,这里介绍一种通过 Socket 方式来进行断点续传的方式,服务端会记录下文件的上传进度,

当某一次上传过程意外终止后,下一次可以继续上传,这里用到的其实还是 J2SE 里的知识。

这个上传程序的原理是:客户端*次上传时向服务端发送

“Content-Length=35;filename=WinRAR_3.90_SC.exe;sourceid=“这种格式的字符串,服务端

收到后会查找该文件是否有上传记录,如果有就返回已经上传的位置,否则返回新生成的 sourceid

以及 position 为 0,类似 sourceid=2324838389;position=0“这样的字符串,客户端收到返回后

的字符串后再从指定的位置开始上传文件。

Fragment相关

1.Fragment 如何实现类似 Activity 栈的压栈和出栈效果的?

Fragment 的事物管理器内部维持了一个双向链表结构,该结构可以记录我们每次 add 的

Fragment 和 replace 的 Fragment,然后当我们点击 back 按钮的时候会自动帮我们实现退栈操作。

2.Fragment 在你们项目中的使用

Fragment 是 android3.0 以后引入的的概念,做局部内容更新更方便,原来为了到达这一点要

把多个布局放到一个 activity 里面,现在可以用多 Fragment 来代替,只有在需要的时候才加载

Fragment,提高性能。

Fragment 的好处:

1. Fragment 可以使你能够将 activity 分离成多个可重用的组件,每个都有它自己的生命周期和

UI。

2. Fragment 可以轻松得创建动态灵活的 UI 设计,可以适应于不同的屏幕尺寸。从手机到平板电

脑。

3. Fragment 是一个独立的模块,紧紧地与 activity 绑定在一起。可以运行中动态地移除、加入、

交换等。

4. Fragment 提供一个新的方式让你在不同的安卓设备上统一你的 UI。

5. Fragment 解决 Activity 间的切换不流畅,轻量切换。

6. Fragment 替代 TabActivity 做导航,性能更好。

7. Fragment 在 4.2.版本中新增嵌套 fragment 使用方法,能够生成更好的界面效果

3.如何切换 fragement,不重新实例化

正确的切换方式是 add(),切换时 hide(),add()另一个 Fragment;再次切换时,只需 hide()当前,

show()另一个

四大组件相关

1.Activity和Fragment生命周期有哪些?

Activity——onCreate->onStart->onResume->onPause->onStop->onDestroy

Fragment——onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onPause->onStop->onDestroyView->onDestroy->onDetach

2.广播的两种注册方式及有什么区别

3.内存不足时,怎么保持Activity的一些状态,在哪个方法里面做具体操作?

Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。除非该activity是被用户主动销毁的,通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

4.启动service的两种方法?有什么区别?

一种是startService(),另一种是bindService()。这两者的区别是*种方式调用者开启了服务,即会与服务失去联系,两者没有关联。即使访问者退出了,服务仍在运行。如需解除服务必须显式的调用stopService方法。主要用于调用者与服务没有交互的情况下,也就是调用者不需要获取服务里的业务方法。比如电话录音。而后者调用者与服务绑定在一起的。当调用者退出的时候,服务也随之退出。用于需要与服务交互。

5.Android中的Context, Activity,Appliction有什么区别?

相同:Activity和Application都是Context的子类。

Context从字面上理解就是上下文的意思,在实际应用中它也确实是起到了管理上下文环境中各个参数和变量的总用,方便我们可以简单的访问到各种资源。

不同:维护的生命周期不同。 Context维护的是当前的Activity的生命周期,Application维护的是整个项目的生命周期。

使用context的时候,小心内存泄露,防止内存泄露,注意一下几个方面:

1. 不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的。

2. 对于生命周期长的对象,可以使用application,context。

3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化。

6.Context是什么?

它描述的是一个应用程序环境的信息,即上下文。

该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类(ContextIml)。

通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent,信息,等。

7.Service 是否在 main thread 中执行, service 里面是否能执行耗时的操

作?

默认情况,如果没有显示的指 servic 所运行的进程, Service 和 activity 是运行在当前 app 所在进

程的 main thread(UI 主线程)里面。

service 里面不能执行耗时的操作(网络请求,拷贝数据库,大文件 )

 

特殊情况 ,可以在清单文件配置 service 执行所在的进程 ,让 service 在另外的进程中执行

1
2
3
4
5
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>

 

8.Activity 怎么和 Service 绑定,怎么在 Activity 中启动自己对应的

Service?

Activity 通过 bindService(Intent service, ServiceConnection conn, int flags)跟 Service 进行

绑定,当绑定成功的时候 Service 会将代理对象通过回调的形式传给 conn,这样我们就拿到了

Service 提供的服务代理对象。

在 Activity 中可以通过 startService 和 bindService 方法启动 Service。一般情况下如果想获取

Service 的服务对象那么肯定需要通过 bindService()方法,比如音乐播放器,第三方支付等。如

果仅仅只是为了开启一个后台任务那么可以使用 startService()方法。

9.说说 Activity、Intent、Service 是什么关系

他们都是 Android 开发中使用频率*高的类。其中 Activity 和 Service 都是 Android 四大组件

之一。他俩都是 Context 类的子类 ContextWrapper 的子类,因此他俩可以算是兄弟关系吧。不过

兄弟俩各有各自的本领,Activity 负责用户界面的显示和交互,Service 负责后台任务的处理。Activity

和 Service 之间可以通过 Intent 传递数据,因此可以把 Intent 看作是通信使者。

10.请描述一下 BroadcastReceiver

BroadCastReceiver 是 Android 四大组件之一,主要用于接收系统或者 app 发送的广播事件。

广播分两种:有序广播和无序广播。

内部通信实现机制:通过 Android 系统的 Binder 机制实现通信。

1. 无序广播:完全异步,逻辑上可以被任何广播接收者接收到。优点是效率较高。缺点是一个接收者不

能将处理结果传递给下一个接收者,并无法终止广播 intent 的传播。

2. 有序广播:按照被接收者的优先级顺序,在被接收者中依次传播。比如有三个广播接收者 A,B,C,

优先级是 A > B > C。那这个消息先传给 A,再传给 B,*后传给 C。每个接收者有权终止广播,比

如 B 终止广播,C 就无法接收到。此外 A 接收到广播后可以对结果对象进行操作,当广播传给 B 时,

B 可以从结果对象中取得 A 存入的数据。

在通过 Context.sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler,

initialCode, initialData, initialExtras)时我们可以指定 resultReceiver 广播接收者,这个接收者我们

可以认为是*终接收者,通常情况下如果比他优先级更高的接收者如果没有终止广播,那么他的

onReceive 会被执行两次,*次是正常的按照优先级顺序执行,第二次是作为*终接收者接收。

如果比他优先级高的接收者终止了广播,那么他依然能接收到广播

11.为什么要用 ContentProvider?它和 sql 的实现上有什么差别?

ContentProvider 屏蔽了数据存储的细节,内部实现对用户完全透明,用户只需要关心操作数据的

uri 就可以了,ContentProvider 可以实现不同 app 之间共享。

Sql 也有增删改查的方法,但是 sql 只能查询本应用下的数据库。而 ContentProvider 还可

以去增删改查本地文件. xml 文件的读取等。

12.说说 ContentProvider、ContentResolver、ContentObserver 之间的关系

a. ContentProvider 内容提供者,用于对外提供数据

b. ContentResolver.notifyChange(uri)发出消息

c. ContentResolver 内容解析者,用于获取内容提供者提供的数据

d. ContentObserver 内容监听器,可以监听数据的改变状态

e. ContentResolver.registerContentObserver()监听消息。

View 相关

1.onInterceptTouchEvent()和onTouchEvent()的区别

onInterceptTouchEvent()用于拦截触摸事件

onTouchEvent()用于处理触摸事件

2.RemoteView在哪些功能中使用

APPwidget和Notification中

3. SurfaceView和View的区别是什么?

SurfaceView中采用了双缓存技术,在单独的线程中更新界面

View在UI线程中更新界面

4.View的绘制过程

一个View要显示在界面上,需要经历一个View树的遍历过程,这个过程又可以分为三个过程,也就是自定义View中的三要素:大小,位置,画什么,即onMesure(),onLayout(),onDraw()。

1.onMesure()确定一个View的大小;

2.onLayout()确定View在父节点上的位置;

3.onDraw()绘制View 的内容;

5.如何自定义ViewGroup

1.指定的LayoutParams

2.onMeasure中计算所有childView的宽和高,然后根据childView的宽和高,计算自己的宽和高。(当然,如果不是wrap_content,直接使用父ViewGroup传入的计算值即可)

3.onLayout中对所有的childView进行布局。

6.View中onTouch,onTouchEvent,onClick的执行顺序

dispatchTouchEvent—->onTouch—->onTouchEvent—–>onClick。在所有ACTION_UP事件之后才触发onClick点击事件。

性能优化相关

1.ListView卡顿的原因与性能优化,越多越好

重用converView: 通过复用converview来减少不必要的view的创建,另外Infalte操作会把xml文件实例化成相应的View实例,属于IO操作,是耗时操作。

减少findViewById()操作: 将xml文件中的元素封装成viewholder静态类,通过converview的setTag和getTag方法将view与相应的holder对象绑定在一起,避免不必要的findviewbyid操作

避免在 getView 方法中做耗时的操作: 例如加载本地 Image 需要载入内存以及解析 Bitmap ,都是比较耗时的操作,如果用户快速滑动listview,会因为getview逻辑过于复杂耗时而造成滑动卡顿现象。用户滑动时候不要加载图片,待滑动完成再加载,可以使用这个第三方库glide

Item的布局层次结构尽量简单,避免布局太深或者不必要的重绘

尽量能保证 Adapter 的 hasStableIds() 返回 true 这样在 notifyDataSetChanged() 的时候,如果item内容并没有变化,ListView 将不会重新绘制这个 View,达到优化的目的

在一些场景中,ScollView内会包含多个ListView,可以把listview的高度写死固定下来。 由于ScollView在快速滑动过程中需要大量计算每一个listview的高度,阻塞了UI线程导致卡顿现象出现,如果我们每一个item的高度都是均匀的,可以通过计算把listview的高度确定下来,避免卡顿现象出现

使用 RecycleView 代替listview: 每个item内容的变动,listview都需要去调用notifyDataSetChanged来更新全部的item,太浪费性能了。RecycleView可以实现当个item的局部刷新,并且引入了增加和删除的动态效果,在性能上和定制上都有很大的改善

ListView 中元素避免半透明: 半透明绘制需要大量乘法计算,在滑动时不停重绘会造成大量的计算,在比较差的机子上会比较卡。 在设计上能不半透明就不不半透明。实在要弄就把在滑动的时候把半透明设置成不透明,滑动完再重新设置成半透明。

尽量开启硬件加速: 硬件加速提升巨大,避免使用一些不支持的函数导致含泪关闭某个地方的硬件加速。当然这一条不只是对 ListView。

2.如何避免 OOM 问题的出现

使用更加轻量的数据结构 例如,我们可以考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构。通常的HashMap的实现方式更加消耗内存,因为它需要一个额外的实例对象来记录Mapping操作。另外,SparseArray更加高效,在于他们避免了对key与value的自动装箱(autoboxing),并且避免了装箱后的解箱。

避免在Android里面使用Enum Android官方培训课程提到过“Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.”,具体原理请参考《Android性能优化典范(三)》,所以请避免在Android里面使用到枚举。

减小Bitmap对象的内存占用 Bitmap是一个*容易消耗内存的大胖子,减小创建出来的Bitmap的内存占用可谓是重中之重,,通常来说有以下2个措施: ++inSampleSize++:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。 ++decode format++:解码格式,选择ARGB_6666/RBG_545/ARGB_4444/ALPHA_6,存在很大差异

Bitmap对象的复用 缩小Bitmap的同时,也需要提高BitMap对象的复用率,避免频繁创建BitMap对象,复用的方法有以下2个措施 LRUCache : “*近*少使用算法”在Android中有*其普遍的应用。ListView与GridView等显示大量图片的控件里,就是使用LRU的机制来缓存处理好的Bitmap,把近期*少使用的数据从缓存中移除,保留使用*频繁的数据, inBitMap高级特性:利用inBitmap的高级特性提高Android系统在Bitmap分配与释放执行效率。使用inBitmap属性可以告知Bitmap解码器去尝试使用已经存在的内存区域,新解码的Bitmap会尝试去使用之前那张Bitmap在Heap中所占据的pixel data内存区域,而不是去问内存重新申请一块区域来存放Bitmap。利用这种特性,即使是上千张的图片,也只会仅仅只需要占用屏幕所能够显示的图片数量的内存大小

使用更小的图片 在涉及给到资源图片时,我们需要特别留意这张图片是否存在可以压缩的空间,是否可以使用更小的图片。尽量使用更小的图片不仅可以减少内存的使用,还能避免出现大量的InflationException。假设有一张很大的图片被XML文件直接引用,很有可能在初始化视图时会因为内存不足而发生InflationException,这个问题的根本原因其实是发生了OOM。

StringBuilder 在有些时候,代码中会需要使用到大量的字符串拼接的操作,这种时候有必要考虑使用StringBuilder来替代频繁的“+”。

避免在onDraw方法里面执行对象的创建 类似onDraw等频繁调用的方法,一定需要注意避免在这里做创建对象的操作,因为他会迅速增加内存的使用,而且很容易引起频繁的gc,甚至是内存抖动。

避免对象的内存泄露

3.三级缓存的原理

从缓存中加载。

从本地文件中加载(数据库,SD)

从网络加载。

a.加载 bitmap 的时候无需考虑 bitmap 加载过程中出现的 oom(内存溢出)和 android 容器快速

滑动的时候出现的图片错位等现象。(16M)

b. 支持加载网络图片和本地图片。

c. 内存管理使用的 lru 算法(移除里面是有频率*少的对象),更好的管理 bitmap 的内存

Android其他

1.讲一下android中进程的优先级?

前台进程

可见进程

服务进程

后台进程

空进程

2.介绍Handle的机制

Handler通过调用sendmessage方法把消息放在消息队列MessageQueue中,Looper负责把消息从消息队列中取出来,重新再交给Handler进行处理,三者形成一个循环

通过构建一个消息队列,把所有的Message进行统一的管理,当Message不用了,并不作为垃圾回收,而是放入消息队列中,供下次handler创建消息时候使用,提高了消息对象的复用,减少系统垃圾回收的次数

每一个线程,都会单独对应的一个looper,这个looper通过ThreadLocal来创建,保证每个线程只创建一个looper,looper初始化后就会调用looper.loop创建一个MessageQueue,这个方法在UI线程初始化的时候就会完成,我们不需要手动创建

3.Dalvik虚拟机与JVM有什么区别

Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。

Dalvik执行.dex格式的字节码,而JVM执行.class格式的字节码。

4.每个应用程序对应多少个Dalvik虚拟机

每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行 ,而所有的Android应用的线程都对应一个Linux线程

5.应用常驻后台,避免被第三方杀掉的方法

Service设置成START_STICKY kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样

通过 startForeground将进程设置为前台进程, 做前台服务,优先级和前台应用一个级别,除非在系统内存非常缺,否则此进程不会被 kill

双进程Service: 让2个进程互相保护对方,其中一个Service被清理后,另外没被清理的进程可以立即重启进程

用C编写守护进程(即子进程) : Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响(Android5.0以上的版本不可行

联系厂商,加入白名单

6.根据自己的理解描述下Android数字签名。

所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序

Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证

如果要正式发布一个Android程序,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。

数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。

7.Dalvik基于JVM的改进

几个class变为一个dex,constant pool,省内存

Zygote,copy-on-write shared,省内存,省cpu,省电

基于寄存器的bytecode,省指令,省cpu,省电

Trace-based JIT,省cpu,省电,省内存

8.ARGB_8888占用内存大小

本题的答案,是4byte,即ARGB各占用8个比特来描述。

9.apk安装卸载的原理

安装过程:复制apk安装包到data/app目录下,解压并扫描安装包,把dex文件(dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。

卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。

10.通过Intent传递一些二进制数据的方法有哪些?

使用Serializable接口实现序列化,这是Java常用的方法。

实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。

11.横竖屏切换时Activity的生命周期

此时的生命周期跟清单文件里的配置有关系。

不设置Activity的android:configChanges时,切屏会重新调用各个生命周期默认首先销毁当前activity,然后重新加载。

设置Activity android:configChanges=”orientation|keyboardHidden|screenSize”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

12.Serializable 和 Parcelable 的区别

在使用内存的时候,Parcelable 类比 Serializable 性能高,所以推荐使用 Parcelable 类。

1. Serializable 在序列化的时候会产生大量的临时变量,从而引起频繁的 GC。

2. Parcelable 不能使用在要将数据存储在磁盘上的情况。尽管 Serializable 效率低点,但在这

种情况下,还是建议你用 Serializable 。

13.Android 中如何捕获未捕获的异常

自 定 义 一 个 Application , 比 如 叫 MyApplication 继 承 Application 实 现

UncaughtExceptionHandler。

覆写 UncaughtExceptionHandler 的 onCreate 和 uncaughtException 方法。

14.Android 的权限规则

Android 中的 apk 必须签名

基于 UserID 的进程级别的安全机制

默认 apk 生成的数据对外是不可见的

AndroidManifest.xml 中的显式权限声明

15.多线程间通信和多进程之间通信有什么不同,分别怎么实现?

一、进程间的通信方式

1. 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的

进程间使用。进程的亲缘关系通常是指父子进程关系。

2. 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的

通信。

3. 信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它

常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进

程间以及同一进程内不同线程之间的同步手段。

4. 消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符

标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5. 信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

6. 共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内

存由一个进程创建,但多个进程都可以访问。共享内存是*快的 IPC 方式,它是针对其他进程间

通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间

的同步和通信。

7. 套接字(socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同

及其间的进程通信。

二、线程间的通信方式

1. 锁机制:包括互斥锁、条件变量、读写锁

*互斥锁提供了以排他方式防止数据结构被并发修改的方法。

*读写锁允许多个线程同时读共享数据,而对写操作是互斥的。

*条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁

的保护下进行的。条件变量始终与互斥锁一起使用。

2. 信号量机制(Semaphore):包括无名线程信号量和命名线程信号量

3. 信号机制(Signal):类似进程间的信号处理

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机

制。

16.说说 LruCache 底层原理

LruCache 使用一个 LinkedHashMap 简单的实现内存的缓存,没有软引用,都是强引用。如果添

加的数据大于设置的*大值,就删除*先缓存的数据来调整内存。

maxSize 是通过构造方法初始化的值,他表示这个缓存能缓存的*大值是多少。

size 在添加和移除缓存都被更新值,他通过 safeSizeOf 这个方法更新值。safeSizeOf 默认返回 1,

但一般我们会根据 maxSize 重写这个方法,比如认为 maxSize 代表是 KB 的话,那么就以 KB 为单

位返回该项所占的内存大小。

除异常外首先会判断 size 是否超过 maxSize,如果超过了就取出*先插入的缓存,如果不为空就

删掉,并把 size 减去该项所占的大小。这个操作将一直循环下去,直到 size 比 maxSize 小或者缓存

为空。

Android常见的三种内部类

Android常见的三种内部类

在java里类中再定义类,这种在其他类内部类叫做内部类,在Android开发里*常见有三种内部类分别是(成员内部类、方法内部类、匿名内部类)

一、成员内部类

复制代码
复制代码
1 public class Test {
2     //不对外开放的
3     class memberInnerClass{
4         public void memberInner(){
5             System.out.println("成员内部类");
6         }
7     }
8 }
复制代码
复制代码

编译一下,我们看到目录中出现了两个class文件在我们的工作目录里,可以看到多出一个Test$memberInClass.class的文件,这是就是内部类编译后的class文件

%title插图%num

成员内部类的特点:
  1. 内部类就像一个实例成员一样存在于外部类中。
  2. 内部类可以访问外部类的所有成员就想访问自己的成员一样没有限制。
  3. 内部类中的this指的是内部类的实例对象本身,如果要用外部类的实例对象就可以用类名.this的方式获得。
  4. 内部类对象中不能有静态成员,原因很简单,内部类的实例对象是外部类实例对象的一个成员。

二、方法内部类

复制代码
复制代码
1 public class A {
2 
3     public void A(){
4         System.out.println("方法内部类");
5     }
6 
7 }
复制代码
复制代码
复制代码
复制代码
 1 public class Test {
 2     
 3     public void methodInner(){
 4         //短暂性的
 5         class B extends A{
 6             
 7         }
 8         new B().A();
 9     }
10 }
复制代码
复制代码

方法内部类特点:

  1.  方法中的内部类没有访问修饰符, 即方法内部类对包围它的方法之外的任何东西都不可见。
  2.  方法内部类只能够访问该方法中的局部变量,所以也叫局部内部类。而且这些局部变量一定要是final修饰的常量。

三、匿名内部类(在Android里*常见的一种)

当我们把内部类的定义和声明写到一起时,就不用给这个类起个类名而是直接使用了,这种形式的内部类根本就没有类名,因此我们叫它匿名内部类

复制代码
复制代码
1 public abstract class A implements B{
2 
3     public void A(){
4         System.out.println("A");
5     }
6 
7 }
复制代码
复制代码
1 public interface B{
2     
3     public void B();
4 
5 }
复制代码
复制代码
 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         //new出接口或者实现类
 5         A a= new A (){
 6             //实现接口里未实现的方法
 7             public void B() {
 8                 System.out.println("匿名内部类");
 9             }
10         };
11         a.A();
12         a.B();
13 }
复制代码
复制代码
匿名内部类的特点:
  1. 一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。
  2. 只是为了获得一个对象实例,不需要知道其实际类型。
  3. 类名没有意义,也就是不需要使用到。

静态方法中不能new内部类的实例对象的总结

静态方法中不能new内部类的实例对象的总结

class Test{
     public void main(String[] args){
    A testA=new A();  //这里会出现问题
        new Thread(new Runnable(){
            public void run(){
            testA.printout();
         }
         }).start();
         System.out.println("aaaaaa");  
    }
  
     class A{
              public void printout(){
              System.out.println("aaaaaa");    
        }
      }
  }
静态方法中不能new内部类的实例对象。这是为什么了? 
内部类的*重要的一个特点就是它可以直接访问它外部类的成员变量。成员变量是对象身上的。对象创建完成了,才会为成员变量分配空间。能调用成员变量,意味着一定有了实例对象.
main方法是静态的,它执行的时候可以不用创建那个对象。这就矛盾了。
main方法运行的时候没有任何外部类的实例对象。我们的内部类的实例对象创建了它又可以访问外部类的成员变量,外部类的实例对象在哪儿了?
所以这个原因,我们下面的代码就要进行改写
要想创建内部类的实例对象,必须创建外部类的实例对象。
//  修改之后的代码如下:
 class Test{
     public void main(String[] args){
    new Test().init();
         System.out.println("aaaaaa");  
    }
  
  public void init(){
    A testA=new TestA();
        new Thread(new Runnable(){
            public void run(){
            testA.printout();
         }
         }).start();
    }  
  class A{
              public void printout(){
              System.out.println("aaaaaa");    
        }
      }
  }
方法的调用一定是要通过对象调用的。
哪个对象调用了这个方法,创建内部类实例对象的时候所使用的外部类的实例对象就是谁