繁体   English   中英

一类的线程完成后可以让另一类知道吗?

Thread in one class on completed can it let another class know about it?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在android中有一个活动(Main Activity),该活动调用另一个类(不是活动)来做某事。 此类启动线程以从服务器下载数据。 下载完成后,我可以发送一条消息告诉主Activity类做其他事情吗? 我正在查看处理程序,但随后需要在同一类中定义处理程序。 还有其他我想念的东西吗?

编辑:谢谢..但是我的问题是线程是从另一个类启动的。 场景是我有绑定到服务并正在接收消息的活动。 我将消息发送到处理该消息的处理器类。 我返回一个响应并发送新请求。 现在,对于其中一条消息,我需要从服务器(在另一个类中)获取数据,并在下载消息时发送响应。

2 个回复

是的,您可以使用在您的UI线程中创建的Handler程序,并通过工作线程将消息发布到该处理程序。

更通用的解决方案是使用事件总线,例如Otto或GreenRobot,它们可以处理应用程序中的所有消息传递。 我写了一篇关于此的博客文章

我建议您使用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();
    }
}
1 将一类与另一类绑定

假设我有一个定义特定问题的类,例如,获取某些函数的值。 但是该函数只能采用特定的参数,即它们受某些约束的影响。 这是简单的示例: 还有另一个解决方案类,其中包含一个可以传递给Problem定义的函数的参数以及该函数的值: 我可以有很多可能的Solution ,但是它们都有相同 ...

2 从另一类调用一个类

我正在尝试学习Java,但肯定没有得到任何东西。 为了简化起见,让我们假设我有两个类,即A类和B类。我想从A类调用B类,当我这样做时,我需要在A类内部的任何位置单击鼠标右键(右键)以获取B类中定义的弹出菜单。代码如下: CLASS A代码: B类代码是: 我在A类中添加了 ...

3 访问另一类中的一类的属性和方法。 上一个线程的继续

我在一个人问“ Python:在另一个中访问一个类的属性和方法”的地方发现了这个线程。 接下来是Martijn Pieters♦的一个答案 : “现在,A可以引用self.parent(如果不是None的话),而B可以引用self.child。如果您尝试使A的实例成为多个B的孩子, ...

4 将变量从一类传递到另一类

在这种特定情况下,我创建了一个Packet pk,它基本上是一个由3个BigInteger组成的对象。 在我特定的Sender类中,生成此数据包后,我试图将其传递给Network类。 在我的网络课程中。 我试图分配我声明的两个变量数据包(inFromSender,outToReciev ...

5 将价值从一类传递到另一类

我有3节课: AddText (扩展活动) Grafitti (扩展MapActivity) MarkerOverlay Grafitti调用AddText ,然后AddText打开一个新的Activity,该新Activity从用户(EditText)获取输入 ...

2010-02-17 16:12:17 2 869   android
6 将数据从一类转换为另一类

我正在尝试将数据从一个ExtensionMethods类转换为另一个名为ComboBoxViewItem的类 ExtensionMethods : ComboBoxViewItem 步骤1现在,我要做的是将数据从WCF服务加载到如下所示的组合框中之一: 步骤2我想添 ...

7 将数据从一类传递到另一类

我知道这里已经被问过几次了,相信我,在这里发布我的问题之前,我已经阅读了很多。 但是我还没有解决我的问题。 因此,任何帮助将不胜感激。 首先,这涉及到4个不同类中的4个函数(在单独的文件中,可以使用import访问,这不是要关注的点)。 这是所涉及功能的脚本: MAIN程序 ...

8 将Button从一类转到另一类

我在A.Class中声明了一个按钮,并将其设置为禁用状态。 现在我想在另一个类(B.class)中启用此按钮,我尝试通过给Button s2 = A.s1启用此按钮; 但是它抛出一个错误,提示“无法从活动类型静态引用非静态方法findViewById(int)” 请帮助我纠正错误 ...

2012-08-23 11:35:50 2 2282   android
9 将变量从一类传递到另一类

我目前无法将变量从一类传递到另一类。 我的第一堂课是由我的名为(Calculator)的表单制作的默认班级。 第二个称为记录。 当我单击正确的变量时,以上内容将显示在弹出框中。 但是当我调用方法startRecording()时,变量值没有被提取。 这是因为创建了一个新的计 ...

2016-08-02 19:06:38 2 96   c#
10 一类的输入,另一类的输出?

我正在开发一个android应用程序。 我想要这样,以便当用户创建帐户时,应用程序从New成员类中获取用户输入,并在另一个类中创建输出。 例如,用户输入他们的姓名。 在完全不同的类的应用程序主屏幕上,他们可以看到“您好%name%!您今天想做什么?”,这里有我的新用户类。 和我所说 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM