“安卓手机为什么老是这么卡”,
“安卓手机高配置的低能儿”
作为一个安卓开发工程师,不知道听到别人这么说安卓的时候,你怎么感想。
之前遇到个问题,app在后台杀死后,用户进行暖启动,用户会直接进入之前浏览过的页面。这时公共bean的数据是没有的,但是每次后台请求数据时,是需要各种请求头的,这时就会出错。当时,只有一年工作经验的我第一想到的就是保活,而且当时觉得保活很帅,我想实战一下。但是,在和师傅商量后,否定了自己的想法。最后,我们在父类activity中每次判断公共bean中的一个字段是否为空实现的。后来,我想想其实保活对这个问题起不了多大作用,而且浪费系统资源。所以思路,交流,理解需求很重要。
为什么需要保活? 我们需要做一些实时的事情。比如:IM, 及时推送。
进程想要常驻后台,一般两类方法:保活和拉活。
保活: 白名单,1像素,前台服务保活
拉活: 账户同步拉活,JobScheduler,双进程,workManager
1像素:手机锁屏后,在屏幕上开一个1像素的界面,将app置为前台进程。因为国内手机厂商为了息屏后省电,会将部分后台进程杀死。
一像素Activity:
public class KeepAct extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//直接用windo设置该acitivty为1像素
Window window = getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.y = 0;
params.x = 0;
params.width = 1;
params.height = 1;
window.setAttributes(params);
PowerManager powerManager = (PowerManager) this
.getSystemService(Context.POWER_SERVICE);
boolean ifOpen = powerManager.isScreenOn();
if (ifOpen)
finish();
else
KeepManager.getInstance().setm