我想检查应用程序是否在后台运行.
在:
locationManagerDidUpdateLocation {
if(app is runing in background){
do this
}
}
Run Code Online (Sandbox Code Playgroud) objective-c uiapplicationdelegate application-lifecycle ios ios-background-mode
我正在开发Android应用程序一段时间,并且关注了很多关于活动生命周期和应用程序生命周期的帖子.
我知道Activity.finish()
方法调用的方法Activity.onDestroy()
,并从堆栈中删除活动,我想它以某种方式指向操作系统和垃圾收集器,他可以"做他的把戏"并释放内存,当它发现它是一个很好的时间做所以....
我来到这篇文章 - 退出申请不赞成?并阅读Mark Murphy的回答.
这让我对这个finish()
方法究竟是做什么感到困惑.
我有机会打电话finish()
,onDestroy()
不会打电话吗?
我正在开发一个相当复杂的Android应用程序,它需要关于应用程序的大量数据(我说总共大约500KB - 这对于移动设备来说是否很大?).据我所知,应用程序中的任何方向更改(在活动中,更准确地说)会导致活动的完全破坏和重新创建.根据我的发现,Application类没有相同的生命周期(即,所有意图和目的,它总是被实例化).将状态信息存储在应用程序类中然后从Activity引用它是否有意义,或者由于移动设备上的内存限制,这通常不是"可接受的"方法?我真的很感激有关这个主题的任何建议.谢谢!
在我的Android应用程序中,我有一个DefaultApplication
扩展的类android.app.Application
,并在其中onCreate()
绑定了一些服务,这些服务将由我在此应用程序中的其他活动使用.
我也有一个BroadcastReceiver
侦听和接收C2DM消息.当此接收器在应用程序未运行时收到消息时,它将触发一个对话框,显示即将发送的消息,它将启动我的应用程序的活动.
我的问题是,当我开始一个没有任何交互的活动时DefaultApplication
,我DefaultApplication
的onCreate()
被调用是因为该应用程序的活动已经开始了吗?
以下是我的定义和清单DefaultApplication
:
public class DefaultApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
doBindService();
}
void doBindService() {
// Establish a connection with the service. We use an explicit
// class name because we want a specific service implementation that
// we know will be running in our own process (and thus won't be
// supporting component replacement by other applications). …
Run Code Online (Sandbox Code Playgroud) 在Android Application类中,您可以注册/取消注册ActivityLifecycleCallbacks,它允许您在一个地方监视应用程序中的Activity生命周期事件(如果您愿意).
调用unregisterActivityLifecycleCallbacks的适当位置在哪里?我正在onCreate注册,并且认为onTerminate只是从方法的名称开始才是合适的位置,但文档对onTerminate()说:
此方法用于模拟过程环境.永远不会在生产Android设备上调用它,只需杀死它们即可删除进程; 这样做时不会执行任何用户代码(包括此回调).
我没有在Application类中看到任何其他方法,其中进行了'shutdown'类型的回调.你甚至需要取消注册吗?
我正在调查一个奇怪的问题,我们将 更改androidx.appcompat:appcompat
为1.3.1
,1.4.1
突然我们的LifecycleObservers
观察过程生命周期停止发出任何事件。
我也在使用"androidx.lifecycle:lifecycle-extensions:2.2.0"
,我知道这已经被弃用,但如果 appcompat 是,它可以完美地工作1.3.1
我已在清单中设置了正确的应用程序名称,我已根据文档的要求包含此提供程序。
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)
初始化的示例,不起作用。该对象被注入到Application
类中,并且生命周期观察器被添加,但从onStart
未被onStop
调用。
class AppLifecycle @Inject constructor(
private val foregroundProxy: AppLifecycleProxy
) : LifecycleObserver {
init {
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
foregroundProxy.onStarted()
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop() {
foregroundProxy.onStopped()
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:根据 @EpicPandaForce 评论,将清单中的提供程序块更改为:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities=\"${applicationId}.androidx-startup"
android:exported="false"
tools:node=\"merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.lifecycle.ProcessLifecycleInitializer"
android:value="androidx.startup" …
Run Code Online (Sandbox Code Playgroud) android android-appcompat application-lifecycle android-lifecycle
我有一个广播接收器,它在Android Applcation类的onCreate()方法中注册但是如何取消注册
例
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我在应用程序onCreate()方法中注册了它,并且Application类中没有onDestroy()/ onStop()方法来取消注册broadcastReceiver.
如何实现它
我的控制台今天发布了这个错误, [ApplicationLifecycle] UIWindows were created prior to initial application activation. This may result in incorrect visual appearance.
这导致应用程序 UI 行为不正常。我以前从未见过这种情况,需要了解从哪里开始调试。
macOS: Catalina 10.15
XCode version: Version 11.1
Run Code Online (Sandbox Code Playgroud) 我认为这对你有用
我的应用程序有问题.它有很多活动.其中两个有谷歌地图视图.我的A活动有一个完整的MapView,我的B活动有一个小的MapView.好的,当我在B活动上并且有时按回键直到我返回到我的A活动时,我的A活动的地图显示有错误,屏幕底部有一个黑色区域.这只发生在我从B活动中按回来时.
因此,我需要知道在获得焦点时在A中调用哪个方法,因为我需要实现/覆盖它以从SCRATCH REPAINT ALL THE WINDOW.
还有哪些代码我需要从头开始重新绘制所有窗口?