「已注销」 2016-06-07 02:59 采纳率: 0%
浏览 2601
已采纳

android 应用程序可能在它的主线程上做太多工作。怎么解决

public class MainActivity extends Activity {
private boolean suspend = true;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ImageView imageView = (ImageView) findViewById(R.id.image);
    imageView.setBackgroundResource(R.drawable.imagelong2);
    final ClipDrawable drawable = (ClipDrawable) imageView.getDrawable();
    ToggleButton toggleButton = (ToggleButton) findViewById(R.id.togbtn);
    toggleButton.setText("播放");
    toggleButton.setTextOn("暂停");
    toggleButton.setTextOff("播放");
    toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (suspend == true) {
                //获取图片所显示的ClipDrawable对象

                final Handler handler = new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        // TODO Auto-generated method stub
                        if (msg.what == 0x123) {
                            drawable.setLevel(drawable.getLevel() + 1);
                        }
                    }
                };
                final Timer timer = new Timer();
                timer.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        Message msg = new Message();
                        msg.what = 0x123;
                        handler.sendMessage(msg);
                        if (drawable.getLevel() >= 10000) {
                            timer.cancel();
                        }
                    }
                }, 0, 1);

                suspend = false;
                if (suspend == false) {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                suspend = true;

            }

        }
    });
}

}


写了一个 ClipDrawable的进度条 想控制暂停让线程等待出现错误Skipped 127 frames! The application may be doing too much work on its main thread. 只有加了Thread.sleep(2000);以后在有这个问题,会很卡,请问我这个要怎么改啊

  • 写回答

5条回答 默认 最新

  • Kelley_cfy 2016-06-07 03:45
    关注

    setContentView(R.layout.activity_main);
    final ImageView imageView = (ImageView) findViewById(R.id.image);
    imageView.setBackgroundResource(R.drawable.imagelong2);
    final ClipDrawable drawable = (ClipDrawable) imageView.getDrawable();
    ToggleButton toggleButton = (ToggleButton) findViewById(R.id.togbtn);
    toggleButton.setText("播放");
    toggleButton.setTextOn("暂停");
    toggleButton.setTextOff("播放");

        final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x123) {
                    drawable.setLevel(drawable.getLevel() + 1);
                    if (drawable.getLevel() >= 10000) {
                        //不再发送message
                    } else{
                        Message nextMsg = Message.obtain(this, 0x123);
                        sendMessage(nextMsg);
                    }
                }
            }
        };
        toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //获取图片所显示的ClipDrawable对象
                Message nextMsg = Message.obtain(handler, 0x123);
                handler.sendMessage(nextMsg);
            }
        });
    

    修改成这样试试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料