如何使主活动线程影响第二个活动

Posted

技术标签:

【中文标题】如何使主活动线程影响第二个活动【英文标题】:how to make Main Activity thread affect Second Activity 【发布时间】:2017-06-17 08:52:39 【问题描述】:

我的MainActivity 有一个Thread,它会生成 RSA 密钥并返回生成密钥所需的时间(以毫秒为单位)。

当我运行这个Thread 时,应用程序转到第二个Activity

我需要第二个Activity 以毫秒为单位接收该时间。

据我了解,一旦您致电 startActivity(),父母 Activity 就会进入睡眠状态。那么如何同时运行两者呢?

谢谢!

【问题讨论】:

使用广播接收器来通知甚至监听您的 RAS 密钥的人。 谢谢!我会调查的 【参考方案1】:

您可以使用 LocalBroadcastReceiver。

public class SecondActivity extends AppCompatActivity 

private BroadcastReceiver mRsaReceiver = new BroadcastReceiver() 

    @Override
    public void onReceive(Context context, Intent intent) 

        ArrayList<String> rsaList = intent.getStringArrayListExtra("rsaList");
    
;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);
    LocalBroadcastManager.getInstance(this).registerReceiver(mRsaReceiver, new IntentFilter("RSA"));


@Override
protected void onDestroy() 
    super.onDestroy();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mRsaReceiver);

来自您的 rsa 线程

Intent rsaIntent = new Intent("RSA");
rsaIntent.putExtra("rsaList", rsaArrayList);
LocalBroadcastManager.getInstance(context).sendBroadcast(rsaIntent);

【讨论】:

【参考方案2】:

据我了解,一旦您 startActivity(),父 Activity 就会进入睡眠状态。那么如何同时运行两者

你没有。你不需要。由于您在单独的线程上生成 RSA 密钥,因此代码应该完全独立于您的活动(除了在 MainActivity 中启动)。因此,您只需要知道后台任务何时完成 - 为此您可以使用应用内 broadcasts 或使用事件总线(如 GreenRobot's EventBus 库)或使用 RxJava。

【讨论】:

谢谢!我要开始研究广播了!

以上是关于如何使主活动线程影响第二个活动的主要内容,如果未能解决你的问题,请参考以下文章

Android:没有活动和线程的服务

使用 AsyncTask 解析 HTML 使主线程变慢

通过活动 1 时刷新活动 2 中的列表视图

防止线程不必要的退出并使池保持活动状态

为什么我的线程组列表中有这么多的绑定器和asynctasks?他们是如何管理的?

如何从线程更新 UI?