如何将数据从线程发送到主活动java android

如何将数据从线程发送到主活动java android,java,android,multithreading,Java,Android,Multithreading,我有一个线程,我想做一些计算,然后发送到我的程序的主要活动。我怎么能做到 线是 class RemindTask extends TimerTask { public void run() { flag = true; System.out.println(" Hello World!"); for (int e=0; e<2; e++){ fileToReceive = fileparts.peek();

我有一个线程,我想做一些计算,然后发送到我的程序的主要活动。我怎么能做到

线是

class RemindTask extends TimerTask {
    public void run() {
        flag = true;
        System.out.println(" Hello World!");
        for (int e=0; e<2; e++){
            fileToReceive = fileparts.peek();
            System.out.println("fileToReceive "+fileToReceive);
            fileToReceive = fileparts.remove();
        }
        IntegerResult = 4;
        flag=false; 
    }
然后我需要把IntegerResult带到主活动 大体上如此 主要方法是

int i=0;
//IntegerResult = 4; here i need to take the result of the thread
while (!fileparts.isEmpty()  ) { //&& !fileparts1.isEmpty() && (flag == false) 
    String[] myStringArray = new String[IntegerResult];
    for (int e=0; e<IntegerResult; e++){
        if (fileToReceive != null && !fileparts.isEmpty() ){
            fileToReceive = fileparts.peek();
            myStringArray[e] =  fileToReceive;
            fileToReceive = fileparts.remove();
         } else {
            myStringArray[e] =  " ";
         }
         System.out.println("myStringArray["+e+"] " + myStringArray[e]);
    }
inti=0;
//积分结果=4;这里我需要获取线程的结果
而(!fileparts.isEmpty()){/&&!fileparts1.isEmpty()&&(flag==false)
字符串[]myStringArray=新字符串[IntegerResult];

对于(int e=0;e更新

使用自定义
BroadcastReceiver

在ActivityA.java中写下这个

 Intent intent = new Intent();
 intent.putExtra("message","hi");
 intent.setAction("com.android.activity.SEND_DATA");
 sendBroadcast(intent); 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
   // Extract data included in the Intent
   String message = intent.getStringExtra("message");
   Log.d("receiver", "Got message: " + message);
  }
};
ServiceA.java/ActivityB.java中编写

 Intent intent = new Intent();
 intent.putExtra("message","hi");
 intent.setAction("com.android.activity.SEND_DATA");
 sendBroadcast(intent); 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
   // Extract data included in the Intent
   String message = intent.getStringExtra("message");
   Log.d("receiver", "Got message: " + message);
  }
};
现在注册
Receiver

LocalBroadcastManager.getInstance(mContext).registerReceiver(mMessageReceiver,
  new IntentFilter("com.android.activity.SEND_DATA"));   

看来你需要的是

您可以按照Rstar的建议使用服务,但这可能有点过头了。

有两种方法:

  • 如前所述,在异步任务上使用此选项
  • 创建一个处理程序来接收响应
  • 比如:

    public static int YOUR_INT_MESSAGE = 100;
    
    class RemindTask extends TimerTask {
        public void run() {
            flag = true;
            System.out.println(" Hello World!");
            for (int e=0; e<2; e++){
                fileToReceive = fileparts.peek();
                System.out.println("fileToReceive "+fileToReceive);
                fileToReceive = fileparts.remove();
            }
            IntegerResult = 4;
            flag=false; 
            Message msg = new Message();
            msg.what = YOUR_INT_MESSAGE;
            msg.obj = IntegerResult;
            YourActivity.this.handler.sendMessage(msg);
        }
    
    public static int YOUR_int_MESSAGE=100;
    类任务扩展TimerTask{
    公开募捐{
    flag=true;
    System.out.println(“你好,世界!”);
    
    对于(int e=0;这是一个常见问题解答。您应该考虑使用
    阻止队列
    ,例如
    LinkedBlockingQueue
    。它允许多个线程共享信息,并为您处理所有同步和信令。如果您的答案中只包含一个链接,则应将其作为注释发布。