Dam*_*iii 17 java android android-activity android-handler android-looper
我想知道我们是否有可能postDelayed在android上处理/检测带有延迟(方法)的可运行回调?
例如,handler.postDelayed(new Runnable()...我的应用程序(用于测试目的的应用程序)有一个或几个splashscreen(运行).在这个应用程序中,我还有一个库(我正在应用程序中创建和使用它)以及一些在类上运行的IntentService类.
有时,当应用程序运行那些splashscreenActivities(for Testing purpose)时,我正在创建的库可能会在UI中自动弹出一些活动.但似乎如果这些活动出现在splashscreen活动上并且splashscreen正在被销毁,那些活动(自动弹出)也将被销毁并在logcat中记录"泄露的窗口"消息.
问题是:
所以我的问题是(相对于我正在创建的库方面而没有UI应用程序流的信息):
PS:请注意,通常情况下,我正在使用自动出现的假设活动的对话框.
UPDATE
图解说明:
现在我有一个正在执行Splashscreen的案例.
扩展IntentService类的类已收到来自Internet的请求,该请求将启动一个Activity.
同时启动了启动画面postdelayed,其他活动已创建并在UI中显示.当X秒已经过去且另一个Activity未被销毁时,将创建Next Activity并自动销毁另一个Activity.在这样做时,Android会相对于Activity抛出"泄露的窗口"消息.
你需要更好地解释问题。我对闪屏与其他活动的关系以及问题是否与postDelayed()活动生命周期相关或相关感到困惑。我建议用一个小图表来解释哪些活动启动其他活动。
关于postDelayed(),一般来说,如果你这样做
mHandler.postDelayed(new Runnable() { ... });
Run Code Online (Sandbox Code Playgroud)
您每次都会发布一个匿名的、新鲜的可运行文件,因此您将无法删除它。我建议采用以下方法,将 Runnable 声明为库中的类成员:
Runnable mLaunchSplashRunnable = new Runnable() { ... };
Runnable mLaunchContactsRunnable = new Runnable() { ... };
.
.
mHandler.postDelayed (mLaunchSplashRunnable, DELAY);
mHandler.postDelayed (mLaunchContactsRunnable, DELAY);
.
.
Run Code Online (Sandbox Code Playgroud)
由于可运行对象现在不是匿名的,因此您可以随时将它们从队列中删除:
void removeLibraryDelayedRunnables() {
mHandler.removeCallbacks(mLaunchSplashRunnable);
mHandler.removeCallbacks(mLaunchContactsRunnable);
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果没有任何已发布的可运行对象,前面的方法不会失败,因此随时调用它都是安全的。
Handler据我所知,查询特定对象是否已排队的方法Runnable不存在,但您可以使用一个boolean标志,在可运行对象排队时设置它,并在Runnable运行时重置它,以指示可运行对象正在挂起。
如果我能更好地理解你的问题,我就能提供更多帮助。
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |