Threading in Android to process long running processes

别说谁变了你拦得住时间么 提交于 2019-12-31 02:08:08

问题


Ok, here is my problem. I want to learn AsyncTask, Threading and Handler to process long running tasks. I used Android Cook Book and New Boston Android tutorial, but I can't make it work.

I need to change the progress bar message. This is not for project, but to learn threading. Threading is really hard for me. So if you have any tutorial or guide to understand threading please let me know.

Meanwhile I tried Handler class, but it didn't work. So I tried AsyncTask. But it does not work either.

Here is my code.

package com.example.androidpopup;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    Button click_btn;
    ProgressDialog dialog;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        click_btn = (Button) findViewById(R.id.button1);

        click_btn.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {
                dialog = ProgressDialog.show(MainActivity.this, "",
                        "Recording...", true);
                dialog.setCancelable(true);
                Thread thread = new Thread(){
                    public void run(){
                        try{
                            sleep(2000);
                            new UpdateUI().execute("testing");
                        }catch(InterruptedException e){
                            e.printStackTrace();
                        }
                    }
                };
            }
        });
    }

    public class UpdateUI extends AsyncTask<String, Integer, String>{

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            return "Searching";
        }

        protected void onPreExecute(String f){
            //example of setting up something
            f = "whatever";
        }

        protected void onProgressUpdate(Integer...progress){

        }

        protected void onPostExecute(String result){
            dialog.setMessage(result);
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

If anyone can explain what's wrong of my approach it would be really helpful.

Thank you!


回答1:


Why are you creating a new Thread just to wait 2 seconds to call AsyncTask? I would suggest you to remove that Thread, normally call the AsyncTask and inside it place Thread.sleep(....).

Something like:

protected void onPreExecute(String f){
     Thread.sleep(2000);
     //example of setting up something
     f = "whatever";
}

PS: in order to run a Thread, you need to call thread.start. ;)



来源:https://stackoverflow.com/questions/11814054/threading-in-android-to-process-long-running-processes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!