Android屏幕卡顿、黑屏问题、多线程

我在程序首次启动的时候复制一些文件到sd卡上面,我用的是异步任务来实现的,但是还是明显感到启动时黑屏卡顿很久。按理论来说,启用了异步任务不会阻塞主线程的,但为什么主线程还是被阻塞了,很疑惑

上代码看看吧。
或者你降优先级试试。

class CopyTask extends AsyncTask{

    @Override
    protected Void doInBackground(String... params) {
        // TODO Auto-generated method stub
        copyPicture(params[0],params[1]);
        return null;
    }

}
就是在 doInBackground里面去调用了复制文件的代码

经过调试发现,主线程的pid和在异步任务里面执行的外码的pid是一样的,说明他们还是同一个线程,这是为毛啊,说好的新线程呢?

首先判断这段代码有没有执行,如果没有,先看看是否调用了execute方法,如果都正常,看其他位置是否有耗时操作。如下代码放在onCreate中正常执行,没有卡顿。

         new AsyncTask<String,Integer,String>(){

            @Override
            protected String doInBackground(String... params) {
                System.out.println("===========================");
                SystemClock.sleep(5000);
                System.out.println("===========================");
                return null;
            }
        }.execute("hello world");

首先,pid指的是进程ID,你的主线程和子线程应该是在同一个进程,所以pid是相同的,tid应该不一样。至于卡顿,要么就是你的AsyncTask用得不对,要么就是有其他地方阻塞了主线程;最后实在不行,直接用new Thread{}.start()也未尝不可。

上面的说得对,他们确实不是在同一个线程,我估计也是其他地方阻塞了主线程,哎,现在问题还没有找到