我的应用程序播放音轨并进入后台。到目前为止,背景音频播放(使用 AudioTrack)工作正常。我已经使用服务实现了这个。但是在 android 操作系统升级(1.2.2 到 2.3 和 2.2 到 2.3)之后,当用户遍历其他应用程序(如画廊和电子邮件)时,问题现在开始出现背景音频播放断断续续或卡住。
应用程序通过按下主 Activity 上的后退按钮进入后台。尽管在使用 Home 键进入后台时它也会卡顿。
这是因为升级吗? 我如何检查应用程序的优先级或应用程序的线程?
任何线索或有人遇到过这样尴尬的问题吗?
m_thread1 = new Thread(
new Runnable()
{
//! \brief Thread that updates time display and related fields
public void run()
{
int tid,pri;
tid = Process.myTid();
Process.setThreadPriority(Process.THREAD_PRIORITY_MORE_FAVORABLE);
pri = Process.getThreadPriority(tid);
while (!Thread.interrupted())
{
try
{
JNI_performAudioPlayback();
Thread.sleep(10);
break;
}
catch (InterruptedException e)
{
break;
}
}
}
},"threadname"
);
Process.THREAD_PRIORITY_AUDIO Process.THREAD_PRIORITY_BACKGROUND + Process.THREAD_PRIORITY_MORE_FAVORABLE Process.THREAD_PRIORITY_BACKGROUND + Process.THREAD_PRIORITY_FOREGROUND Process.THREAD_PRIORITY_BACKGROUND
共有 7 个线程在其服务生命周期中使用上述优先级。
谢谢, JRC
最佳答案
这段代码正是我要找的,但我必须稍微修改一下才能让它适合我。因此:
private void outputTop(){
int count = 0;
int bufferSize = 8*1024;
byte [] data;
Process process = null;
String out = "";
data = new byte[bufferSize];
try { process = Runtime.getRuntime().exec("top -t -n 1"); }
catch (IOException e) {}
if(process != null)
{
BufferedInputStream bis = new BufferedInputStream(process.getInputStream(), bufferSize);
try
{
while ((count = bis.read(data, 0, bufferSize)) != -1)
{
out += org.apache.http.util.EncodingUtils.getAsciiString(data, 0, count);
}
}
catch(IOException e){ }
if (bis != null)
{
try { bis.close();}
catch (IOException e) {}
writeToLogFile(out);
}
}
}
关于后台模式下的android应用程序会减慢设备速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742368/