[英]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.