【问题标题】:Getting current activity from thread从线程获取当前活动
【发布时间】:2010-11-28 09:01:20
【问题描述】:

我有一个监听 TCP 连接的线程。当建立连接时,我想基本上停止当前活动正在做的事情,并转移到另一个运行不同线程并显示不同布局的活动。

现在我还想保持该线程运行(等待 TCP 连接)。

我可以在 Intent 上使用 startActivity() 将活动从一个更改为另一个,但这在我的线程中不起作用。

我怎样才能实现这种行为?

非常感谢,

詹姆斯

【问题讨论】:

    标签: android multithreading android-activity


    【解决方案1】:

    Android 中长时间运行的任务编程的经验法则。如果你有:

    1. 一次仅由一个 Activity 使用的短期运行任务(线程),然后使用 AsyncTask

    2. 一个长期运行的任务应该在 Activity 的生命周期中存活和/或被多个 Activity 使用(也在您的应用程序外部),而不是使用 Service。 Service 是一个独立的进程,比 Activity 更能适应关闭。

    3. 需要根据一些外部条件运行的任务,例如:位置更改、网络可用等。或者如果您需要定期数据同步或基于计时器的任务,那么您不需要一个正在运行的任务,只需使用适当的 API 注册您的代码,操作系统就会在适当的时候调用它。这称为异步编程,是 Android 上的首选选项,因为它仅在需要调用代码时才调用代码,从而最大限度地减少内存和处理器的使用。

    【讨论】:

    • 非常感谢您的解释,这非常有用。然后我需要使用服务或 API(2 或 3)。我不确定是否有可以“等待 TCP 连接”的 API。你知道我怎么能找到它吗?否则谢谢!很有帮助!
    • 服务可以加载 Activity 吗?我的服务将永远等待 TCP 连接。发生这种情况时,将启动一个接收和发送 UDP 数据包的活动(它也有自己的布局)。请问这样行吗?
    • 即使应用程序在后台,您是否需要不断打开 TCP 连接?这会耗尽电池电量,并且在移动网络上可能会很昂贵。
    • 是的服务可以启动一个活动。但这被认为是非常糟糕的做法:如果用户正在做其他事情(使用其他应用程序),那么您的活动将突然启动并且当前活动将被置于后台。你知道你手机上的任何应用程序都有这样的行为吗?在这种情况下,最好使用通知(声音、LED、通知栏)。这是通过 NotificationManager 完成的。
    • 我正在构建一个 VoIP 应用程序。所以我正在等待传入的连接。如果建立了连接,我切换到 UDP 并开始发送和接收录音。所以我认为是的,它将一直开放。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2011-05-28
    • 2017-09-02
    相关资源
    最近更新 更多