HY !!
我从Object
班级中新建Thread
。 run方法中有一个带有结果字符串的Http-Post。
我的问题:
如何通知主类下载完成?
MFG
答案 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类将为您处理所有线程内容,您可以专注于您的工作。
答案 2 :(得分:0)
创建Callable
而不是创建线程,并通过submit()
方法将其传递给ExecutorService
:
Future<T> submit(Callable<T> task)
向Callable
提交ExecutorService
对象会返回Future
个对象。 get()
的{{1}}方法将会阻止,直到任务完成并包含Future
的结果。
示例:
Callable