幽沉谢世事,俯默窥唐虞。这篇文章主要讲述Android7.0手机程序保活(附源码下载)相关的知识,希望能为你提供帮助。
项目地址,求star
https://github.com/979451341/AppAlive
本人在学习音视频时无意发现的黑科技,发现在使用AudioTrack播放音乐时,使用手机的一键清理发现程序还在,我指的是Activity还活着。
我当时就想起来了酷狗音乐也是这样,当我没有播放音乐时,这个酷狗音乐通过我一键清理会死掉,如果我播放音乐再一键清理就不会死,而且它还有前台通知存活,但是如果暂停音乐再一键清理还是会死。
我再说说我的程序
我在raw文件下放了一个pcm文件,然后播放这个pcm
DataInputStream dis = new DataInputStream(
new BufferedInputStream(getResources().openRawResource(R.raw.a)));
// 实例AudioTrack
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,
mFrequence,
mPlayChannelConfig, mAudioEncoding, bufferSize,
AudioTrack.MODE_STREAM);
track.setStereoVolume(0,0);
// 开始播放
track.play();
其中我还通过track.setStereoVolume(0,0); 将播放pcm文件时的音量调成0,也就是静音
还有就是播放这个pcm是不断循环的,而且是处于后台的,所以我使用了AsyncTask来调控这个进程,通过mIsPlaying来控制这个播放的停止
class PlayTask extends AsyncTask<
Void,Void,Void>
{
@Override
protected Void doInBackground(Void... arg0) {
mIsPlaying = true;
for(;
mIsPlaying;
){
int bufferSize = AudioTrack.getMinBufferSize(mFrequence,
mPlayChannelConfig, mAudioEncoding);
short[] buffer = new short[bufferSize ];
try {
// 定义输入流,将音频写入到AudioTrack类中,实现播放
DataInputStream dis = new DataInputStream(
new BufferedInputStream(getResources().openRawResource(R.raw.a)));
// 实例AudioTrack
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,
mFrequence,
mPlayChannelConfig, mAudioEncoding, bufferSize,
AudioTrack.MODE_STREAM);
track.setStereoVolume(0,0);
// 开始播放
track.play();
// 由于AudioTrack播放的是流,所以,我们需要一边播放一边读取
while (mIsPlaying &
&
dis.available() >
0) {
int i = 0;
while (dis.available() >
0 &
&
i <
buffer.length) {
buffer[i] = dis.readShort();
i++;
}
// 然后将数据写入到AudioTrack中
track.write(buffer, 0, buffer.length);
}// 播放结束
track.stop();
dis.close();
} catch (Exception e) {
// TODO: handle exception
Log.e("slack","error:" + e.getMessage());
}
}return null;
}protected void onPostExecute(Void result) {}protected void onPreExecute() {}
}
对于AudioTrack占住资源能够使得app在android7.0的手机一键清理下存活,这个原理在下不懂,求大神留言教教在下
【Android7.0手机程序保活(附源码下载)】还有我试验的时候用了android7.0的华为,程序通过一键清理可以不死,但是在android7.2的魅族的一键清理下还是死了,果然定制内存管理就是强大
推荐阅读
- APP垂直市场应用趋势(女性APP)
- bzoj2127: happiness
- Docker与Android Studio的冲突问题
- android studio 消除RadioButton中的圆圈
- AppScan安全扫描(已解密的登录请求)
- Win8系统插入移动硬盘提示“是否需要格式化”的处理办法|Win8插入移动硬盘提示“是否需要格式化”怎样办
- win8系统桌面创建空白文件夹的办法【图文】
- Win 8系统设置单击鼠标打开应用程序的办法
- Win8系统频繁弹出“Windows安全警报”的处理办法|Win8系统频繁弹出“Windows安全警报”窗口怎样办