后台模式下的android应用程序会减慢设备速度

标签 android multithreading

我的应用程序播放音轨并进入后台。到目前为止,背景音频播放(使用 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/

相关文章:

java - 关键部分在 onSensorChanged() 中不起作用

java - 在新线程中使用 Apache HttpClient,我不知道它是否运行完毕

java - 即使 ScheduledFuture 被取消,ThreadPoolExecutor 也会运行

android - 尽管在 API 19 中运行良好,但 API 级别 16 中未显示背景 ImageView

安卓 : RecyclerView onclick update another RecyclerView

android - 为什么加速度计日志包含一个时间戳的两个 x、y、z 值?

java - Android 中的线程

java - 检测空闲 ThreadPoolExecutor 线程何时被杀死

java - 试图在android中的两个 Activity 之间传递长数组

android - 如何关闭操作点击通知?