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

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

#1楼 票数:0

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

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

#2楼 票数:0 已采纳

我建议您使用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();
    }
}

  ask by JourneyWithAndroid translate from so

未解决问题?本站智能推荐:

2回复

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

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

将Button从一类转到另一类

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

一类的输入,另一类的输出?

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

从一类到另一类使用方法

我有两节课: MyActivity.Java DatabaseHandler.Java 我想将方法​​“ getCurrentCar”中返回的String放入MyActivity.java中 DatabaseHandler.Java: 我已经尝试过,但是参数要求使用Con
2回复

从一类到另一类获取价值

我正在使用Intent传递值,但无法在其他课程中接收。 我想在下一节课中收到这个意图。
4回复

将int值从一类传递到另一类?

我创建了一个EditText来获取每次用户在该EditText中键入内容时的退格计数,并且对用户键入的字母数进行计数,并为用户键入的键数获取退格的百分比。 但是我坚持寻找一种将int值从一个类传递到另一个类的方法。 这就是我过去在当前班级中传递int计数的方式, 计数是退格键的数量,这
3回复

将一类的方法调用到另一类:Android

我有两个Java文件Main和New。 总的来说,我有许多方法从oncreate到曲面销毁。 单击按钮之一后,转到“新建”。 在那里,我已经调用了相同的xml文件。 但是那里没有任何方法。 我想调用oncreate方法,包括来自New的所有方法。 请帮忙 第二类
4回复

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

在B类中,我有以下方法: 在A类中,我只想简单地调用此方法。 我以为ClassB.sendPlayerDataMethod()可以解决问题,但是当我键入它时,IntelliJ似乎没有ClassB.sendPlayerDataMethod() 。 这两堂课都是公开的... 我想调用该