主类和线程类之间的逻辑问题

时间:2011-01-28 08:26:26

标签: java android

HY !!

我从Object班级中新建Thread。 run方法中有一个带有结果字符串的Http-Post。

我的问题:

如何通知主类下载完成?

MFG

3 个答案:

答案 0 :(得分:1)

如果“主要课程”是指Activity,那么您可以使用Handler

在您的活动中:

private static final int DOWNLOAD_COMPLETE = 0;
...

private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        switch(msg.what){
        case DOWNLOAD_COMPLETE:
            Log.d("MYTAG",msg.obj.toString());
            break;
        }
    }
}

在其他一些课程中:

public doBackgroundUpdate(Handler handler){
    Thread backgroundThread = new Thread() {
        @Override
        public void run() {
            // do long-running post operation

            // send result back to UI thread
            Message msg = Message.obtain();
            msg.what = DOWNLOAD_COMPLETE;
            msg.obj = "Result String to pass";
            handler.sendMessage(msg);
        }
    }
    backgroundThread.start();
}

答案 1 :(得分:1)

查看AsyncTask类,它可以帮助您处理除UI线程之外的其他线程的工作。这是一个非常有用的Android框架类。

您只需创建一个继承自AsyncTask的自定义类,然后覆盖doInBackground()并插入应在其自己的线程中执行的代码。在您的情况下,这将是下载的代码。此外,您必须覆盖doInBackground()方法完成时自动调用的onPostExecute()。您在doInBackground()方法中返回的对象将自动传递给onPostExecute()方法。 onPostExecute()将在UI线程上执行。

因此,AsyncTask类将为您处理所有线程内容,您可以专注于您的工作。

查看tutorial on the Android Developer site

答案 2 :(得分:0)

创建Callable而不是创建线程,并通过submit()方法将其传递给ExecutorService

Future<T> submit(Callable<T> task)

Callable提交ExecutorService对象会返回Future个对象。 get()的{​​{1}}方法将会阻止,直到任务完成并包含Future的结果。

示例:

Callable