Android-关于android的多线程问题,这样写对吗?

Android-关于android的多线程问题,这样写对吗?

归属感 发布于 2016-12-18 字数 415 浏览 1206 回复 3

我想用这样的方法来一边展示一个圆型的ProgressDialog,一边执行一些操作。但是这样写起来的话,在操作执行的时候,ProgressDialog不转动,效果很不好,应该怎么写?

pd = ProgressDialog.show(GridLayoutActivity.this, "","...");
new Thread(new Runnable() {
public void run() {
someFunc();
handler.sendEmptyMessage(0);// 执行耗时的方法之后发送消给handler
}
}).start();

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虐人心 2017-09-10 3 楼

在android中一般用轻量级的异步AsyncTask

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}

protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}

protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}

在doInBackground中做异步的操作,异步执行完了就执行onPostExecute。

灵芸 2017-04-03 2 楼

怎么看whilgeek的代码都没有大的问题呀
不过,whilgeek是在哪执行这段代码的呢?

我在 onCreate 里面写下

 dialog = ProgressDialog.show(this, "test", "oops!");
new Thread(new Runnable()
{
@Override
public void run()
{
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}

handler.sendEmptyMessage(0);

}
}).start();

然后在 handler 里面对 0 == msg.what 进行 dialog.dimiss();
启动 Activity 之后的 5s 都是正常的延迟等待阶段,要不也试试?

祝好,斑驳敬上

虐人心 2017-03-05 1 楼

someFunc();里面的操作如果太占CPU的话ProgressDialog会卡.你可以降低线程的优先级试试.
( Thread.currentThread().setPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND))