Android 如何提供应用程序的“即时”确认';当主活动是透明的时,如何执行?
我的应用程序的主要活动在Android清单文件中定义,具有以下属性:Android 如何提供应用程序的“即时”确认';当主活动是透明的时,如何执行?,android,Android,我的应用程序的主要活动在Android清单文件中定义,具有以下属性: android:theme=“@style/theme.transparent.NoTitleBar” 这使活动透明,从而可以通过操纵主视图对象(例如,在主视图上调用setVisibility(View.INVISIBLE))来控制代码中我的应用程序的透明度。这个很好用 然而,这种方法的一个不良后果是,当应用程序启动时,在显示我的主视图之前没有可见的响应。通常,当应用程序启动时,应用程序主要活动的默认黑色背景会立即可见,这会立
android:theme=“@style/theme.transparent.NoTitleBar”
这使活动透明,从而可以通过操纵主视图对象(例如,在主视图上调用setVisibility(View.INVISIBLE)
)来控制代码中我的应用程序的透明度。这个很好用
然而,这种方法的一个不良后果是,当应用程序启动时,在显示我的主视图之前没有可见的响应。通常,当应用程序启动时,应用程序主要活动的默认黑色背景会立即可见,这会立即确认应用程序正在开始运行,以响应用户点击启动器中的图标。但在透明背景下,用户继续在启动应用程序的显示器上查看背景,直到显示主视图,因此(在该时间间隔内)它看起来好像什么都没有发生
即使是在性能平平的设备上(例如摩托罗拉Droid),我的观点也会在一秒钟内出现,这并不太糟糕。然而,在速度非常慢的设备(例如G1)上,它可能需要将近四秒钟的时间。虽然这不是一场灾难,但我更喜欢立即响应,这样用户就不会怀疑应用程序是否真的被触发了
我试着删除透明主题,结果像往常一样通过黑色背景立即确认。但是,一旦应用程序被初始化,我就无法在代码中将活动背景设置为透明
在第一次调用setContentView()
之前,我已经对活动调用了setTheme()
,并向其传递了一个透明主题,但这并不能使活动透明
我也在onCreate()
中尝试过这一点(同样,就在调用setContentView()之前):
这似乎也没有效果
我还尝试在我的清单中使用一个主题,该主题的android:windowBackground
设置为一个可绘制的,主要是一个透明的PNG,但在透明的背景上叠加一些文本(例如,应用程序的名称),这将向用户提供应用程序正在加载的提示。不幸的是,当我使用一个可绘制的作为主题的一部分时,背景根本无法显示,直到主视图初始化之后
所有耗时的初始化都已经在一个工作线程中完成了,所以我不想寻求关于如何实现这一点的建议。视图本身只是需要一定的时间来显示,虽然它相当快,但没有什么能比应用程序一启动就看到主要活动背景的即时反应更好
即使是在性能平平的设备上(例如摩托罗拉Droid),我的观点也会在一秒钟内出现,这并不太糟糕。然而,在速度非常慢的设备(例如G1)上,它可能需要将近四秒钟的时间
它应该在几毫秒内出现。确保在主应用程序线程上没有做过多的工作
视图本身只是需要一定的时间来显示,虽然它相当快,但没有什么能比应用程序一启动就看到主要活动背景的即时反应更好
然后,首先显示一些更便宜的东西(例如,ProgressBar
),当它准备好时,用常规用户界面替换它。我对Commonware的答案投了赞成票,因为他给我指出了正确的方向,这与尝试在主活动启动后改变其透明度相去甚远(我开始怀疑这件事不容易做到)
然而,这一建议本身不能成为公认的答案,因为它只是指向正确方向的指针
根据这个指导,我决定创建一个splash显示。但是,我在任何地方都找不到一个真正好的android splash示例。因此,我设计了一个,它对我来说非常有效,完全解决了我的问题
由于创建闪屏比我开始时提出的问题更为一般,因此我将如何创建闪屏的详细说明作为关于如何实现闪屏的问题的答案,并链接到下面的答案:
这是一个相当“脏”的解决方案,但您可以添加一个“虚拟/启动屏幕”背景活动这是应用程序的启动活动。在onCreate中,您启动主活动并完成启动屏幕活动。我尝试了这一点,但结果是启动屏幕活动从未出现;出现了通常的延迟,然后出现了我的主活动(从启动活动中的onCreate()调用)。splash活动如预期在堆栈上,当我将其主视图设置为透明时,它在我的主活动的“后面”可见;它只是在显示主活动之前从未进行过显示。如果这可以解决,我怀疑它将涉及以某种方式将主活动设置为透明。setTheme()如果在setContentView()之前完成,则应该可以工作,但我无法实现这一点,即使是在onCreate()的顶部完成.从功能上讲,这对我来说并不是什么大问题,我可能不得不把它放在一边处理更紧迫的任务,但我对人们可能有的任何建议都很感兴趣。在G1上,即使我的应用程序在后台完全初始化,也需要4秒钟才能恢复显示。G1只是一个速度较慢的设备,而且有很多图形元素nts(游戏板,控件)使其在我的主显示器上刷新。甚至我的G1主屏幕图标也需要4秒钟才能显示。我怀疑显示简单的活动背景使用了本机编码的循环,
ColorDrawable transparentDrawable = new ColorDrawable(Color.TRANSPARENT);
getWindow().setBackgroundDrawable(transparentDrawable);