但是在Java,AndroID SDK中,您必须覆盖主要活动中的许多方法,并且所有方法都在一个文件中进行.例:
我的项目中有一个MainActivity.java和SomeTest.java文件,其中第一个是默认的MainActivity类,它扩展了Activity,SomeTest.java包含声明和运行新Thread的类.我从MainActivity.java初始化SomeTest类,并将活动的句柄作为参数传递给它:
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()是一个回调方法.它被称为活动.你无法改变这一点.
And having the handle to MainActivity,I proceed doing everything from this newly created thread.
这通常不是一个好主意.使用后台线程,比如从文件或数据库加载一些数据是完全合理的(尽管使用Loader或AsyncTask可能更好).但是,通常,后台线程既不知道也不关心“新创建的ListVIEw的宽度和高度”之类的事情.
当然欢迎您将一些逻辑从活动中移出并转移到其他类中.您可以使用特定的框架,例如片段或自定义视图.但是,类结构不应由您的线程模型驱动.例如,让我们回到你的开场白:
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全部内容,希望文章能够帮你解决java – 保持事物分散Android所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)