gpt4 book ai didi

java - 让事情去中心化 Android

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:28 25 4
gpt4 key购买 nike

这对于 Android SDK 来说可能没有多大意义,但是,在 C++ 中,我习惯于将我的 main.cpp(特别是 main() 函数)作为我声明和初始化其他类/对象的地方,并且之后,我的应用程序所做的所有事情都发生在这些类(class)中。之后我再也没有回来检查 main.cpp 中的任何内容。但在 Java、Android SDK 中,您必须在主要 Activity 中重写数十种方法,并且所有这些都发生在一个文件中。示例:

我的项目中有 MainActivity.java 和 SomeTest.java 文件,其中第一个是扩展 Activity 的默认 MainActivity 类,SomeTest.java 包含声明和运行新线程的类。我从 MainActivity.java 初始化 SomeTest 类并将 Activity 的句柄作为参数传递给它:

SomeTest test = new SomeTest(MainActivity.this);

有了 MainActivity 的句柄,我就可以从这个新创建的线程开始执行所有操作。当我需要更新 UI 时,我使用 runOnUiThread() 在我的主布局上创建并显示一个新的 ListView(例如)。我想获取新创建的 Listview 的宽度和高度,因为我必须在我的 MainActivity.java 中覆盖 onWindowFocusChanged() 并从那里通知线程,因为 getWidth() 和 getHeight() 只有在 ListView 是实际显示在屏幕上。对我来说,从 MainActivity 到该线程建立这样的连接('回调',如果你愿意的话)不是一个好习惯。

有没有一种方法可以让像 onWindowFocusChanged() 这样的方法线程中并且完全不触及 MainActivity.java?

正如我所说,可能没有多大意义。

最佳答案

Is there a way I can keep methods like onWindowFocusChanged() within the thread and don't touch the MainActivity.java at all?

onWindowFocusChanged() 是一个回调方法。它被称为 Activity 。您无法更改此设置。

And having the handle to MainActivity, I proceed doing everything from this newly created thread.

这通常不是一个好主意。例如,使用后台线程从文件或数据库加载一些数据是完全合理的(尽管使用 LoaderAsyncTask 可能更好)。然而,通常情况下,后台线程应该既不知道也不关心“新创建的ListView的宽高”之类的东西。

当然欢迎您将一些逻辑从 Activity 中迁移到其他类中。您可能为此使用特定的框架,例如 fragment 或自定义 View 。但是,类结构不应由您的线程模型驱动。例如,让我们回到您的开场白:

in C++ I am used to keeping my main.cpp (and specifically main() function) as a place where I declare and initialize other classes/objects, and afterwards all the things that my application does take place in those classes

但是,在 C++ 中,您不会说您被锁定在只有两个类中,其中一个在某个后台线程上运行。虽然您可能有一个或多个碰巧使用后台线程(或多个线程)的类,但类结构背后的驱动力不是“我有一个后台线程”,而是“我想重用 XYZ 逻辑”或“我希望使用类层次结构来支持策略模式”或类似的东西。

关于java - 让事情去中心化 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15025893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com