【问题标题】:Displaying a progress wheel on main screen while connecting to internet [Android]连接到互联网时在主屏幕上显示进度轮 [Android]
【发布时间】:2016-04-12 05:32:09
【问题描述】:

我想在徽标屏幕中显示一个在连接到互联网时加载的进度条。 我正在使用下面的课程来检查互联网连接:

 public class AppStatus {
    public boolean isNetworkAvailable(final Context context) {
        final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
        return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected();
    }
}

带有进度条的屏幕代码为:

public class logo_activity extends AppCompatActivity {
    private ProgressBar mProgress;
    private int mProgressStatus = 0;
    private Handler mHandler = new Handler();
    private AppStatus con = new AppStatus();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_logo_activity);
        mProgress = (ProgressBar) findViewById(R.id.progressBar);

        new Thread(new Runnable() {
            public void run() {
                if (con.isNetworkAvailable(getApplicationContext()))
                {
                    mProgressStatus += 10;
                   //user authentication in background.
                }
                else {
                    mProgressStatus +=10;
                   // Display an alert dialog box to connect to internet by launching into settings activity. 
                }

                // Update the progress bar
                mHandler.post(new Runnable() {
                    public void run() {
                        mProgress.setProgress(mProgressStatus);
                    }
                });
            }
        }).start();

    }
}

我面临的问题是警报对话框未显示,当我将活动启动到设置并退出而不打开互联网时,屏幕仅停留在加载屏幕上。 也有人可以为它写一个 asynctask 方法。我似乎无法绕过它。

谢谢。

【问题讨论】:

    标签: android android-asynctask android-progressbar internet-connection


    【解决方案1】:

    问题是您创建的新线程仍然在 UI 线程上运行,因此由于您的 UI 被锁定,因此没有显示任何内容。您需要使用 AssyncTask。 here 是一个教程。

    【讨论】:

    • 那我该怎么办?我将查看关于异步任务的 tut。我应该只对此类任务使用异步任务吗?
    • @KavachChandra 运行时间过长的任务(例如访问互联网)不得在 UI 线程上运行,否则您会看到屏幕延迟。相反,您必须异步运行它们。处理线程(并发)是一个有点复杂的任务,所以android已经提供了AssyncTask和FutureTask等预置类来简化并发。每次异步时,您最好使用 AssyncTask。
    • @KavachChandra 如果对您有帮助,请接受我的回答。
    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多