Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不同的线程中修改不同类的文本视图-Android Studio_Java_Android_Android Activity - Fatal编程技术网

Java 如何在不同的线程中修改不同类的文本视图-Android Studio

Java 如何在不同的线程中修改不同类的文本视图-Android Studio,java,android,android-activity,Java,Android,Android Activity,首先,我不是专家,所以我希望以正确的方式解释,并希望得到不太复杂的答复 我有一个新线程中运行的主要活动。让我们称之为“线程1”,一些操作(在服务器和客户端之间交换数据)。 线程1永远活着 主活动在一段时间后打开一个新活动,我们称之为活动2 活动2有一个textView,我们称之为textView-2 一段时间后,运行的thread-1调用Java类中的静态方法,该方法必须在实时textView中进行修改 我该怎么做? 事先非常感谢。 福斯托你不能(也不应该)按照您所描述的去做。一旦第二个活动启动

首先,我不是专家,所以我希望以正确的方式解释,并希望得到不太复杂的答复

我有一个新线程中运行的主要活动。让我们称之为“线程1”,一些操作(在服务器和客户端之间交换数据)。 线程1永远活着

主活动在一段时间后打开一个新活动,我们称之为活动2 活动2有一个textView,我们称之为textView-2

一段时间后,运行的thread-1调用Java类中的静态方法,该方法必须在实时textView中进行修改

我该怎么做? 事先非常感谢。
福斯托

你不能(也不应该)按照您所描述的去做。一旦第二个
活动启动,第一个
活动
就不再处于运行状态。它们的生命周期回调在同一个线程上被调用:您的
活动
的主线程。您的第一个
活动
不应该与第二个
活动有这样的直接联系>。如果您确实需要辅助后台线程,则必须手动启动它,或者使用类似于
异步任务
或甚至RxJava的观察器之类的其他方法。但是,在其他线程上,您不能直接更改
视图
对象的状态,只能在主线程的上下文中运行时对其进行更改。

这个故事,我是这样解决的:

  • 活动2启动侦听器线程(按while循环)
  • 当activity-1的线程1想要更改activity-2的TextView时,它会向侦听器发送一条消息(修改侦听器的静态变量的值)
    • 侦听器接收消息并将其发送到Activity-2(通过句柄),然后最后更改TextView
    • 我插入了一个控件,在不再需要时退出while循环

我希望能帮助其他人…

在QuestionWelcome中没有清晰到堆栈溢出。请考虑发布一些代码,以便我们能更清楚地帮助您。也请告诉我们您到底在哪里遇到问题。一般来说,在没有查看代码的情况下,一般都不愿意通过静态方法修改实例变量。这是可能的。通过所谓的单例设计模式,但方法是让thread-1通过其他方式(即构造函数或setter)获取对textView的引用,然后操纵该引用。Ciao,谢谢你的回复。我必须编写代码,因为我不知道如何做。让我说,我可以尝试按照你的建议去做“让thread-1通过其他方式(即构造函数或setter)获取对textView的引用,然后操纵该引用“Ciao,谢谢你的回复。我没有编写代码,因为我不知道实现我的目标的代码是什么。我不太理解你的建议:很明显,最好不要使用静态方法,但这是另一种选择”,让线程1通过其他方式(即构造函数或setter)获取对textView的引用然后操纵那个?你能举个例子吗?谢谢你,阿甘乔,注意第一个活动运行一个新线程(不同于主线程),并且当第二个活动启动时,该线程也会继续运行。我确信这一点,因为这一部分已经实现。老实说,我不是足够的专家,我不理解您回答的第二部分“如果您确实需要第二个后台线程,您必须手动启动它或使用其他方法…”您需要非常小心地启动线程,并允许它们在
活动
暂停或停止后继续运行。如果您的线程试图直接操作
活动
或保留对该活动的强引用,您可能会遇到内存泄漏问题以及无效状态异常。返回y我们的主要问题是:您不能从主线程外部更改
视图
。您可以从中读取其状态或数据,但不能更改它。