首页
社区
课程
招聘
后台APP如何不被安卓系统清理?类似QQ等
发表于: 2014-12-20 09:23 23759

后台APP如何不被安卓系统清理?类似QQ等

2014-12-20 09:23
23759
自己做的APP切换到后台,不到一分钟就被系统杀死了,切换回来的时候就变成了登陆界面,但是安卓系统里很多APP确无论系统多么卡都一直运行,请问有什么猥琐方法可以让APP不被清理掉。

现在可知不被清理,就两个方法,一个是尽量提高APP权限,无非就是保持APP始终界面在前台
二是使用守护进程方法,被清理了立刻自己启动,三是前台跟后台进程分开,被重启了恢复原始环境。

我试验了下,带服务的APP确实清理的几率有所降低,现在我想带个悬浮窗会不会就是前台APP而不被杀死了?如果这个也不行那就只有弄个守护进程了。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
app的service在onStartCommand方法里return START_STICKY就行了,想更猥琐点让服务长期运行就监听系统广播事件启动service,至于activity之类的界面窗口,我目前的知识范围内是必定可以被killed的,QQ也不能保证界面窗口长时间不被干掉啊
2014-12-20 13:13
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
一看就不是IOS
2014-12-20 17:37
0
雪    币: 25
活跃值: (477)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
4
服务器做了被清理就启动,但是还是不行啊,系统资源一占用多,还是会被清理,不只是QQ,其他的很多软件都能死活占用系统资源,还自启动,用专用软件杀都没办法禁止继续运行,哎
2014-12-20 18:56
0
雪    币: 25
活跃值: (477)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
5
QQ现在占用资源很大,只要一运行QQ看消息,我的应用就会被清理,其他的占用资源少点的应用还好点
2014-12-20 18:57
0
雪    币: 105
活跃值: (221)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
清理程序会根据应用的优先级来判定是否关掉的,应该可以手调为大于100的优先级吧
2015-2-15 19:03
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
1、定义系统级别alarm
2、alarm启动服务
3、服务维护你要的东西

应该是这样
2015-3-6 11:13
0
雪    币: 132
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
一般你的activity在后台默认是低于服务的级别,所以如果你用服务都无法保证你的应用不被kill的话说明当前内存也是太少了,还有就是你的app也是占用了过多的内存(同等优先级的应用中),有个比较简单的方法也算部分解决的方法就是,用服务接受解锁屏广播,一旦解锁服务就马上启动当前app,至于你说的可能要保持登陆功能,可以这么做,首先把app放在Service中,让其优先级变为次要服务进程,然后在服务中调用startForeground(),提升为前台进程,这个时候已经是最高优先级了.同时可以做个通知栏,让用户知道这个确实是前台已经开启的进程.
2015-4-26 22:13
0
雪    币: 9
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我之前也遇到类似问题,我在网上也找了很久,最终找到一个可行的方法。
        // 申请设备电源锁,在服务start的时候。
	private WakeLock mWakeLock;

	private void acquireWakeLock()
	{
		if (null == mWakeLock)
		{
			PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
			mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "LoginService");
			if (null != mWakeLock) {
				mWakeLock.acquire();
			}
		}
	}

	// 释放设备电源锁,在服务Destory的时候
	private void releaseWakeLock()
	{
		if (null != mWakeLock)
		{
			mWakeLock.release();
			mWakeLock = null;
		}
	}


这个方法是防止手机休眠。你的服务就会一直运行下去,不会被系统kill掉。亲测可行。
还有在onStartCommand里面最后return super.onStartCommand(intent, START_STICKY, startId);楼上刚刚已经说了~
2015-5-26 14:33
0
雪    币: 9
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
哦,对了,QQ在通知栏不是设了一个不同于一般通知的通知嘛~
代码如下:
Notification notification = new Notification(R.drawable.qqbatch_logo, getString(R.string.app_name),System.currentTimeMillis());
		PendingIntent pendingintent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0);
		notification.setLatestEventInfo(this, "xxxx", "xxxxxxxxx", pendingintent);
		startForeground(0x111, notification);

虽然这个专业术语说不上来,貌似是把服务进程权限提升到前台,也就是提高权限了。服务开始的方法里面。
2015-5-26 14:37
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢分享,试试去!
2015-5-26 19:51
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
service 中 通过startForground拉起 notification 占据在通知栏 才是王道 ...
2015-7-3 15:07
0
游客
登录 | 注册 方可回帖
返回
//