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

发布于 2016-12-18 12:21:55 字数 339 浏览 1305 评论 3

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(3

虐人心 2017-09-10 15:45:37

在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 19:48:05

怎么看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 18:12:16

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文