java - Android Java GUI freeze/w ProgressBar

标签 java android user-interface progress-bar freeze

最近开始学习JAVA/Android,发现了一些有趣的东西。我想制作一个应用程序,顺便说一句,效果很好,但我有一个小问题。我做了一个有很多操作的应用程序。太多以至于 GUI 卡住(PC/智能手机)。例如,我有一个 while 有 10000 个 epoch,在这个 while 里面有许多使用 fors(进化算法)的函数。我正在使用进度条。问题是当我启动应用程序时进度条卡住。我可以向您展示该应用的外观

Evolutionary

如您所见,有一个按钮。我用这个按钮启动整个事情。所以问题是,有什么方法可以让 progresbar 工作吗?我只想让进度条显示实际纪元和最大纪元作为最终值。 我尝试创建一个线程但没有成功,我也尝试了委托(delegate)但都没有成功。

谢谢大家的帮助。

最佳答案

使用异步任务。当你在 UI Thread 中长时间运行任务时,线程阻塞和线程将无法更新 UI,所以你会看到进度条没有增加或加载。使用 AsyncTask 或 Thread Pool Executor 在后台线程中执行长时间运行的任务也是如此

package com.test; 

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings.System;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;

public class AsyncTaskActivity extends Activity {
    Button btn;
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener((OnClickListener) this);
    } 

    public void onClick(View view){
        new LongOperation().execute("");
    } 

    private class LongOperation extends AsyncTask<String, Void, String> {
        @Override 
        protected String doInBackground(String... params) {
            for(int i=0;i<5;i++) {
                try { 
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block 
                    e.printStackTrace();
                } 
            } 

            return null; 
        } 

        @Override 
        protected void onPostExecute(String result) {
            TextView txt = (TextView) findViewById(R.id.output);
            txt.setText("Executed");
        } 

        @Override 
        protected void onPreExecute() { 
        } 

        @Override 
        protected void onProgressUpdate(Void... values) {
        } 
    } 
} 

关于java - Android Java GUI freeze/w ProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335223/

相关文章:

android - 如何在我的 flutter 应用程序中获取欧元符号或印度货币符号?

java - JFrame:如何添加一个向框架添加新文本字段的按钮?

android - 如何处理与 UI 元素的全屏触摸交互

java - 使用 JAVA 运行 AWS CloudFormation 的 python 文件

java - Eclipse——避免与包相关的通知

Android parcelable - 写入可空长

python - 在基于 Python 文本的 GUI (TUI) 中输入

java - Spring Security - 何时清除SecurityContextHolder

java - 没有Ajax想要打两个Url

java - 带有 MPAndroidChart 和图像的图形饼图