- 保活方式
- 原理: 創(chuàng)建一個像素點的activity,通過廣播監(jiān)聽關屏時打開 , 開屏時移出 這activity 因此來達到降低 oom_obj的值來進行本鞍#活
像素點KeepActivity
package com.example.amn.amnimageload.activity;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
/**
* Created by Amn on 2019/4/20.
*/
public class KeepActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window window= getWindow();
//設置activity 左上角
window.setGravity(Gravity.START | Gravity.TOP);
// 創(chuàng)建寬高都 是 1 像素
WindowManager.LayoutParams attributes = window.getAttributes();
attributes.width=1;
attributes.height=1;
attributes.x=0;
attributes.y=0;
window.setAttributes(attributes);
//設置弱引用
KeepManager.getInstance().setKeep(this);
}
}
廣播監(jiān)聽關屏還是息屏 KeepReceive
package com.example.amn.amnimageload.activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
/**
* Created by Amn on 2019/4/20.
*/
public class KeepReceive extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action= intent.getAction();
//息屏
if(TextUtils.equals(action,intent.ACTION_SCREEN_OFF)){
KeepManager.getInstance().startKeep(context);
}else if(TextUtils.equals(action,intent.ACTION_SCREEN_OFF)){
//開屏
KeepManager.getInstance().finishKeep();
}
}
}
管理廣播的注冊 反注冊谓罗,開啟像素activity 的管理類 KeepManager
package com.example.amn.amnimageload.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import java.lang.annotation.Retention;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
/**
* Created by Amn on 2019/4/20.
*/
public class KeepManager {
private static KeepManager instance=new KeepManager();
public static KeepManager getInstance(){
return instance;
}
private KeepManager(){
}
private KeepReceive keepReceive;
private WeakReference<Activity> mActivity;
/**
* 注冊關屏 開屏
*/
public void registerKeep(Context context){
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
keepReceive=new KeepReceive();
context.registerReceiver(keepReceive,intentFilter);
}
/**
* 注銷廣播
*/
public void unregisterKeep(Context context){
if(null != keepReceive){
context.unregisterReceiver(keepReceive);
}
}
/**
* 開啟1像素的activity
*
*/
public void startKeep(Context context){
Intent intent=new Intent(context,KeepActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
/**
* 關閉activity
*/
public void finishKeep(){
if(null != mActivity){
Activity activity= mActivity.get();
if(null != activity){
activity.finish();
}
mActivity =null;
}
}
//綁定弱引用
public void setKeep(KeepActivity activity){
mActivity=new WeakReference<Activity>(activity);
}
}
Manifest配置
<activity android:name=".activity.KeepActivity"
android:excludeFromRecents="true"
android:taskAffinity="com.example.amn.amnimageload"
android:theme="@style/KeepTheme"
></activity>
在activity 使用
package com.example.amn.amnimageload;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.example.amn.amnimageload.activity.KeepManager;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通過 1 像素acticitity 提升優(yōu)先級
KeepManager.getInstance().registerKeep(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
KeepManager.getInstance().unregisterKeep(this);
}
}