android 彻底退出app怎样将app从后台中退出

升级 Android 7.0 系统后,APP 在后台被关闭的解决步骤 - HTC官方社区
请选择举报理由
不当或违法内容
恶意或违法行为
商业广告与废文
還可輸入 200 個字元
评分这篇文章
浏览 : 4327
升级 Android 7.0 系统后,APP 在后台被关闭的解决步骤
文章版块:
A9w 手机升级到 Android 7.0 系统后,有些会出现QQ、微信软件无法接收信息的情况,必须进入相应软件后才可以接收信息。大家可以参照以下2个步骤解决~
<font color="#、进入手机设置中的“应用程序”。找到并点击开启“微信”程序。
点击微信程序中的“流量使用情况”。点击“后台数据”右侧的开关,并开启。
开启后,允许微信在后台使用数据。同样,找到并点击开启“QQ”程序。
点击QQ程序中的“流量使用情况”。点击“后台数据”右侧的开关,并开启。
开启后,允许QQ在后台使用数据。
<font color="#、如果“微信”和“QQ”设置为优化,那么在长时间锁屏并且不开启“微信”或“QQ”的情况下,“微信”或“QQ”程序会被系统优化关闭。此时就算有朋友通过软件发送信息,手机也不会有通知提醒,必须唤醒手机并打开软件后,才能接收信息。
请进入手机设置中的“电源”。
开启“电池优化”,点击下拉菜单。
在菜单中选择“全部应用程序”。找到并点击“微信”。
点击“不优化”按钮,再点击完成。
将“微信”更改为不优化。
同样,找到并点击“QQ”。
点击“不优化”按钮,再点击完成。
将“QQ”更改为不优化。最后下拉菜单。
在下拉菜单中点击“未优化”。在未优化中可以看到“微信”和“QQ”就表示设置成功了。
若1、2 两个选项都勾选,并且手机又开启了“省电模式”,此时相关的即时通讯软件的消息就无法正常接收。
如果遇到其他的 APP 出现后台被关闭的情况。请参考以下步骤。
进入手机设置中的“电源”。开启“电池优化”。
点击下拉菜单。在菜单中选择“全部应用程序”。
找到并点击“锁屏画报”。点击“不优化”按钮。
再点击完成。将“锁屏画报”更改为不优化。
您也可以参考一下:
就是说app自启动这事,可以被完美防止了?
水经验可是很累的╮(╯▽╰)╭
好帖,好人,好事
从更新7.0后类似帖子都不知道发了多少了,要是有用,早没人拿这个说事了。明明就是系统的问题,奇怪为啥就是不承认呢。
都设置了,没有用
这么久了,还是这样的答复,这是让买U11的节奏
沪ICP备号-3 中国Android实现app长时间未操作时自动退出app
这里要考虑3个问题,第一个是锁屏问题,第二个是app被切换至后台的问题,第三个是屏幕锁定和解除时app在后台时的问题
一,监听屏幕解锁,锁定
public class ScreenObserver {
private static String TAG = "ScreenObserver";
private Context mC
private ScreenBroadcastReceiver mScreenR
private ScreenStateListener mScreenStateL
private static Method mReflectScreenS
public ScreenObserver(Context context) {
mContext =
mScreenReceiver = new ScreenBroadcastReceiver();
mReflectScreenState = PowerManager.class.getMethod("isScreenOn",
new Class[] {});
} catch (NoSuchMethodException nsme) {
Log.d(TAG, "API & 7," + nsme);
* screen状态广播接收者
* @author xishaomin
private class ScreenBroadcastReceiver extends BroadcastReceiver {
private String action =
public void onReceive(Context context, Intent intent) {
action = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(action)) {
mScreenStateListener.onScreenOn();
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
mScreenStateListener.onScreenOff();
}else if(Intent.ACTION_USER_PRESENT.equals(action)){
LogUtils.d("----&屏幕解锁完成");
* 请求screen状态更新
* @param listener
public void requestScreenStateUpdate(ScreenStateListener listener) {
mScreenStateListener =
startScreenBroadcastReceiver();
firstGetScreenState();
* 第一次请求screen状态
private void firstGetScreenState() {
PowerManager manager = (PowerManager) mContext
.getSystemService(Activity.POWER_SERVICE);
if (isScreenOn(manager)) {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOn();
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOff();
* 停止screen状态更新
public void stopScreenStateUpdate() {
mContext.unregisterReceiver(mScreenReceiver);
* 启动screen状态广播接收器
private void startScreenBroadcastReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
//当用户解锁屏幕时
filter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiver(mScreenReceiver, filter);
* screen是否打开状态
* @param pm
private static boolean isScreenOn(PowerManager pm) {
boolean screenS
screenState = (Boolean) mReflectScreenState.invoke(pm);
} catch (Exception e) {
screenState =
return screenS
public interface ScreenStateListener {
public void onScreenOn();
public void onScreenOff();
* 判断屏幕是否已被锁定
* @param c
public final static boolean isScreenLocked(Context c)
android.app.KeyguardManager mKeyguardManager = (KeyguardManager) c
.getSystemService(Context.KEYGUARD_SERVICE);
return mKeyguardManager.inKeyguardRestrictedInputMode();
* 判断当前应用是否是本应用
* @param context
public static boolean isApplicationBroughtToBackground(final Context context) {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List&RunningTaskInfo& tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topA
if (!topActivity.getPackageName().equals(context.getPackageName())) {
然后在app的BaseActivity中实现ScreenObserver
private ScreenObservermScreenO
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mScreenObserver = new ScreenObserver(this);
mScreenObserver.requestScreenStateUpdate(new ScreenStateListener() {
public void onScreenOn() {
if(!ScreenObserver.isApplicationBroughtToBackground(MainActivity.this))
cancelAlarmManager();
public void onScreenOff() {
if(!ScreenObserver.isApplicationBroughtToBackground(MainActivity.this))
cancelAlarmManager();
setAlarmManager();
///此处省略一大坨代码
* 设置定时器管理器
private void setAlarmManager()
long numTimeout = 300*1000;//5分钟
LogUtils.d("isTimeOutMode=yes,timeout="+numTimeout);
Intent alarmIntent = new Intent(MainActivity.this, TimeoutService.class);
alarmIntent.putExtra("action", "timeout"); //自定义参数
PendingIntent pi = PendingIntent.getService(MainActivity.this, 1024, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
long triggerAtTime =
(System.currentTimeMillis()+numTimeout);
am.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pi); //设定的一次性闹钟,这里决定是否使用绝对时间
LogUtils.d("-----&设置定时器");
* 取消定时管理器
private void cancelAlarmManager()
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, TimeoutService.class);
PendingIntent pi = PendingIntent.getService(MainActivity.this, 1024, intent,PendingIntent.FLAG_UPDATE_CURRENT);
// 与上面的intent匹配(filterEquals(intent))的闹钟会被取消
alarmMgr.cancel(pi);
LogUtils.d("-----&取消定时器");
protected void onResume() {
LogUtils.e("MainActivity-onResume");
super.onResume();
cancelAlarmManager();
activityIsActive =
LogUtils.d("activityIsActive="+activityIsActive);
protected void onStop() {
LogUtils.e("onStop");
super.onStop();
if (ScreenObserver.isApplicationBroughtToBackground(this))
cancelAlarmManager();
setAlarmManager();
然后在后台finishActivity
public class TimeoutService extends Service implements AppConstants {
public IBinder onBind(Intent arg0) {
boolean isrun =
public void onCreate() {
LogUtils.e("BindService--&onCreate()");
super.onCreate();
public int onStartCommand(Intent intent, int flags, int startId) {
LogUtils.e("BindService--&onStartCommand()");
forceApplicationExit();
return super.onStartCommand(intent, flags, startId);
private void forceApplicationExit()
new Thread(new Runnable() {
public void run() {
ActivityListUtil.getInstence().cleanActivityList();
stopSelf();
}).start();
public void onDestroy() {
super.onDestroy();
ActivityListUtil类如下
public class ActivityListUtil {
private static ActivityListU
public ArrayList&Activity& activityL
public ActivityListUtil() {
activityList = new ArrayList&Activity&();
public static ActivityListUtil getInstence()
if (instence == null) {
instence = new ActivityListUtil();
public void addActivityToList(Activity activity) {
if(activity!=null)
activityList.add(activity);
public void removeActivityFromList(Activity activity)
if(activityList!=null && activityList.size()&0)
activityList.remove(activity);
public void cleanActivityList() {
if (activityList!=null && activityList.size() & 0) {
for (int i = 0; i & activityList.size(); i++) {
Activity activity = activityList.get(i);
if(activity!=null && !activity.isFinishing())
activity.finish();
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.039 (s). 12 q(s)当前位置 & &
& 用安卓 心真累!流氓App和杀后台的斗争
用安卓 心真累!流氓App和杀后台的斗争
22:41:52&&出处:&&
编辑:上方文Q &&)
让小伙伴们也看看:
阅读更多:
好文共享:
文章观点支持
当前平均分:0(0 次打分)
[05-06][05-06][05-06][05-06][05-05][05-05][05-05][05-04][05-04][05-03]
登录驱动之家
没有帐号?
用合作网站帐户直接登录2015年8月 移动开发大版内专家分月排行榜第三2014年9月 移动开发大版内专家分月排行榜第三2014年7月 移动开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 android 彻底退出app 的文章

 

随机推荐