2 yus201120 yus201120 于 2016.03.10 17:15 提问

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

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

6个回答

dynb19
dynb19   2016.03.10 17:31

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

yus201120
yus201120   2016.03.10 17:49

class CopyTask extends AsyncTask{

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

}
就是在 doInBackground里面去调用了复制文件的代码
yus201120
yus201120   2016.03.10 18:14

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

huaheshangxo
huaheshangxo   2016.03.10 19:05

首先判断这段代码有没有执行,如果没有,先看看是否调用了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");
dengyaoning
dengyaoning   2016.03.11 15:55

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

yus201120
yus201120   2016.03.15 09:10

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android App启动时经常会卡顿黑屏或白屏 By Terry
App在点击图标启动时,初始化时候需要一段时间。 如果因为各种原因,导致这个初始化时间过长,会造成很糟糕的用户体验。 经常会产生长时间黑屏,或者长时间白屏的现象。其实产生这一现象的时候App已经进入要启动的页面了。 产生黑屏或者白屏的原因是,启动页Activity已经进入,但是由于初始化耗时等原因,启动页Activity的布局layout还未来得及载入。 知道这个原因之后,如何解决? 为
Android 防止App启动时经常会卡顿黑屏或白屏
App在点击图标启动时,初始化时候需要一段时间。 如果因为各种原因,导致这个初始化时间过长,会造成很糟糕的用户体验。 经常会产生长时间黑屏,或者长时间白屏的现象。其实产生这一现象的时候App已经进入要启动的页面了。 产生黑屏或者白屏的原因是,启动页Activity已经进入,但是由于初始化耗时等原因,启动页Activity的布局layout还未来得及载入。 知道这个原因之后,如何解决? 为什么会是黑屏或者白屏 Activity主题大致分两种,一种是Black(产生黑屏),一种是Light(产生白屏) 但是Activity已经进入,只是他的布局文件没有进入,所以可以处理的方式就是给启动页的Activity窗口设置一个背景。就是布局载入之前的窗口背景。
Android关于处理运行时变化如横竖屏切换等问题
一些Android设备在运行时,它的configuration可能会变化(例如:横竖屏切换,键盘的显示或者隐藏,所用语言的变化),当这些类似的变化发生时,如果在不做任何代码处理的情况下,android会重启当前正在运行的Activity(先回调onDestroy()方法,再回调onCreate()方法)。也许你会问android为什么会这么做,其实这么做的本意也就是为了通过加载一些可供替代的资源,
emWin 卡顿 触屏失效 黑屏 解决方法
emWin初体验              刚学了uC/OS体验到了操作系统的方便,于是想体验下图形处理第三方的强大,emWin便是首选。 我移植emWin一共遇到了两个问题: 1.  一直黑屏。最后实在整不出来,有点郁闷。把例程和自己的程序对照着一行行看。 解决方案:加上RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC,ENABLE)
iOS 一级界面左滑返回导致app卡顿 黑屏
在一级界面增加一下代码:@property (nonatomic, assign)BOOL isCanUseSideBack;  // 手势是否启动- (void)viewDidAppear:(BOOL)animated{    [super viewDidAppear:animated];    [self cancelSideBack];}- (void)viewDidDisappear:(B...
Vitamio的小修改及花屏问题的探讨
最近在做安卓视频模块,背景如下:   视频竖屏播放时,SurfaceView不能对视频进行翻转,采用安卓4.0后的TextureView新控件又会容易受到硬件性能影响(包括TextureView在内试过好几个OpenGL实现的视频播放控件,其性能都更容易收到性能影响,比如播放帧率较大的视频时或者有多个图片资源不断切换时会造成卡顿和丢帧),采用Vitamio后可以解决竖屏播放问题,但其性能还是有待优
Android 主线程卡顿统计
背景:android卡顿问题始终是个悲伤的话题目的:对整个Handler机制进行不同方面的的刨析措施:首先Looper类,本身提供在消息处理前后会print相应消息。我们通过Looper的setMessageLogging方法进行监听,来记录每个主线程任务的运行耗时,超过一定时间,则上报。问题:首先上面的非常简单有效,不过里面也存在一些问题,当在4.x手机上存在复杂列表时,上下快速滑动,会发现存在...
Android屏幕卡顿,电量损耗和Service常驻小结
一、屏幕出现卡顿的原因: 表面原因: 1、在UI主线程中执行比如像网络下载等耗时的操作,致使CPU没有能力在16ms内完成对下一帧显示数据的处理 2、需要显示的界面太过复杂,比如布局的层次较深,界面控件过多等,给CPU与GPU的渲染造成压力 3、手机硬件GPU、CPU处理能力有限,FPS低于16ms,造成卡顿;Android 4.1后Triple Buffering三缓冲机制一定程度上缓解了
Android App卡顿慢优化之多线程优化
本博客涉及的内容有:多线程并发的性能问题,介绍了AsyncTask,HandlerThread,IntentService与ThreadPool分别适合的使用场景以及各自的使用注意事项,这是一篇了解Android多线程编程不可多得的基础文章,清楚的了解这些Android系统提供的多线程基础组件之间的差异以及优缺点,才能够在项目实战中做出最恰当的选择。 1)Threading Performanc
ExoPlayer之seekto掉帧解决办法
随着项目的迭代,在调研了竞品使用的播放器方案之后,最终把播放器从原始的MediaPlayer迁移到ExoPlayer上来。原始的MediaPlayer播放器存在以下问题: 1.seekTo的时候掉帧,只能seekto到指定位置的上一个关键帧 2.进度回调不准(在轮询时间片段的时候,时间跳跃明显,多个视频串联的时候) 3.多个视频衔接的时间中卡顿(从A视频切换到B视频的过程中,需要reset播...