Android-关于android的多线程问题,这样写对吗?
我想用这样的方法来一边展示一个圆型的ProgressDialog,一边执行一些操作。但是这样写起来的话,在操作执行的时候,ProgressDialog不转动,效果很不好,应该怎么写?
pd = ProgressDialog.show(GridLayoutActivity.this, "","...");
new Thread(new Runnable() {
public void run() {
someFunc();
handler.sendEmptyMessage(0);// 执行耗时的方法之后发送消给handler
}
}).start();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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。
怎么看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 都是正常的延迟等待阶段,要不也试试?
祝好,斑驳敬上
someFunc();里面的操作如果太占CPU的话ProgressDialog会卡.你可以降低线程的优先级试试.
( Thread.currentThread().setPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND))