
[英]How can I let another class know that a button was clicked (Android Studio)
[英]Thread in one class on completed can it let another class know about it?
在android中有一个活动(Main Activity),该活动调用另一个类(不是活动)来做某事。 此类启动线程以从服务器下载数据。 下载完成后,我可以发送一条消息告诉主Activity类做其他事情吗? 我正在查看处理程序,但随后需要在同一类中定义处理程序。 还有其他我想念的东西吗?
编辑:谢谢..但是我的问题是线程是从另一个类启动的。 场景是我有绑定到服务并正在接收消息的活动。 我将消息发送到处理该消息的处理器类。 我返回一个响应并发送新请求。 现在,对于其中一条消息,我需要从服务器(在另一个类中)获取数据,并在下载消息时发送响应。
我建议您使用AsyncTask
因为这是它的目的,而不是自己尝试做。
如果不是您想要的AsyncTask
(例如,下载花费了太多时间,您想让线程在后台运行,等等...),而您要做的就是GUI,您可以使用runOnUIThread
上的runOnUIThread
。
如果以前的解决方案不可行,则可以执行以下操作:
public class MainActivity extends Activity {
private void startDownload() {
// Start your thread passing this activity reference for example:
YourThreadStartClass.startThreadedJob(this);
}
public void onDownloadFinish() {
// Do your stuff on MainActivity after the download has finished
}
}
public class YourThreadStartClass {
public static void startThreadedJob(final MainActivity callback) {
new Thread(new YourRunnable(callback)).start();
}
}
// This is the Runnable your thread will be running
public class YourRunnable implements Runnable {
private final MainActivity callback;
public YourRunnable(final MainActivity activity) {
this.callback = activity;
}
@Override
public void run() {
// Do your stuff on this thread and when finished:
this.callback.onDownloadFinish();
}
}
编辑:我已经简化了一点,但是Java中执行此操作的实际正确方法是定义一个像
public interface DownloadFinishedCallback {
void onDownloadFinish();
}
并使您的MainActivity
(或与此有关的任何其他类)实现此接口,并在YourRunnable
使用DownloadFinishedCallback
引用而不是MainActivity
YourRunnable
。
接口示例:
public interface DownloadFinishedCallback {
void onDownloadFinish();
}
public class MainActivity extends Activity implements DownloadFinishedCallback {
private void startDownload() {
// Start your thread passing this activity reference for example:
YourThreadStartClass.startThreadedJob(this);
}
@Override
public void onDownloadFinish() {
// Do your stuff on MainActivity after the download has finished
}
}
public class YourThreadStartClass {
public static void startThreadedJob(final DownloadFinishedCallback callback) {
new Thread(new YourRunnable(callback));
}
}
// This is the Runnable your thread will be running
public class YourRunnable implements Runnable {
private final DownloadFinishedCallback callback;
public YourRunnable(final DownloadFinishedCallback callback) {
this.callback = callback;
}
@Override
public void run() {
// Do your stuff on this thread and when finished:
this.callback.onDownloadFinish();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.