标签: android-lifecycle

Android:如何为 Acivity.onNewIntent() 设置监听器?

我正在为现有的游戏引擎编写自己的插件(可以说它是与主应用程序相关的第 3 方库)。

所以,我无法访问来源MainActivity

尽管如此,我必须对主要活动lifecycle事件(onCreate, onDestroy, onPause, onResume, onNewIntent以及一些不重要的其他事件)做出某种反应。

感谢Application.ActivityLifecycleCallbacks,我对其中大多数都没有问题。

onNewIntent()出现问题。我无法找到listener此事件的信息并想象处理它的方法。

有谁知道如何捕获onNewIntent事件(当然,除了覆盖它)?

java android listener android-lifecycle android-activity

4
推荐指数
1
解决办法
1859
查看次数

何时取消注册 LifecycleObserver

我正在开发一个使用架构组件的项目,我有一个关于正确使用 LifecycleObserver 模式的问题。

\n\n

问题是:我什么时候应该取消注册观察者以及如果没有调用取消注册会发生什么?

\n\n

简单直接的用例可以如下所示:

\n\n
public class MyActivity extends LifecycleActivity {\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0    super.onCreate(savedInstanceState);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0    ...\n        getLifecycle().addObserver(someLifecycleObserver);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0    ...\n        getLifecycle().removeObserver(someLifecycleObserver);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这可能是不费吹灰之力并且正确使用的。但随着观察者的增多,就会出现很多这样的样板代码。

\n\n

好的,现在让我们将 Dagger 添加到其中。我们可以让 Dagger 将这个“someLifecycleObserver”对象注入到 Activity(以及片段等其他地方)。

\n\n

简单的 Dagger 模块如下所示:

\n\n
@Module\npublic class ConfigurationManagerModule {\n\n    @Provides\n    @ActivityScope\n    SomeManager provideSomeManager(final AppCompatActivity activity, final Object otherDependency) {\n        return new SomeManager(activity, otherDependency);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在Activity中我们需要注册/注销观察者。但如果我们可以取消注册并让 Dagger 来完成呢?

\n\n
    @Provides\n    @ActivityScope\n    SomeManager provideSomeManager(final AppCompatActivity activity, final Object otherDependency) {\n …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-architecture-components

4
推荐指数
1
解决办法
3246
查看次数

如何在 Fragment 中获取 LifecycleOwner?

我需要让 LifecycleOwner 在我的 FirestoreRecyclerViewOption 中传递它,但 Fragment 没有实现 Lifecycle。

那么,如何获得呢?

我的 Fragment 实现 LifecycleOnwer,如下面的代码示例所示,

public class ListRestFragment extends Fragment implements LifecycleOwner 
Run Code Online (Sandbox Code Playgroud)

在 onCreateMethod 之后,

  lifecycleRegistry = new LifecycleRegistry(this);
        lifecycleRegistry.setCurrentState(Lifecycle.State.CREATED);
Run Code Online (Sandbox Code Playgroud)

并完成

@Override
    public void onStart() {
        super.onStart();
        lifecycleRegistry.setCurrentState(Lifecycle.State.STARTED);
    }

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return lifecycleRegistry;
    }
Run Code Online (Sandbox Code Playgroud)

我按照这个例子,但它不起作用

Attempt to invoke virtual method 'androidx.lifecycle.Lifecycle$State androidx.lifecycle.Lifecycle.getCurrentState()' on a null object reference
Run Code Online (Sandbox Code Playgroud)

我需要它来编辑 My FirestoreRecyclerViewOption 和 setLifeCycleOwner 因为它始终为 null 并且我每次都有一个 NullPointer 。

android android-lifecycle fragment-lifecycle

4
推荐指数
2
解决办法
7059
查看次数

Android画中画模式,打开我的应用程序的另一个Activity

我有一个视频通话活动,并且正在使用 pip 模式。在 pip 模式下,我尝试使用远程操作打开相关的聊天活动。但是,当从 pip Activity 调用 startActivity 时,新的 Activity 也会在 pip 屏幕中打开。但我确实想在我们的应用程序中打开聊天,而不是在 pip 屏幕中。是否可以在 pip 屏幕之外启动我们自己的 Activity?

android android-lifecycle android-activity android-picture-in-picture

4
推荐指数
1
解决办法
5182
查看次数

防止配置更改后通知 onFocus 侦听器?

我附上一个焦点侦听器,到EditText时就OnCreateView在我的Fragment。如果EditText获得焦点,则通知侦听器。到目前为止一切顺利,但在屏幕旋转后,当焦点恢复到新的Fragment. 有什么好的做法可以区分由于配置更改引起的侦听器通知和由于真实的人工交互引起的通知吗?或者在由于配置更改而导致焦点更改后根本不通知侦听器?

android screen-rotation android-lifecycle

4
推荐指数
2
解决办法
195
查看次数

Koin 的生命周期范围与活动范围。他们是一样的吗?

我正在从https://github.com/InsertKoinIO/koin/blob/master/koin-projects/docs/reference/koin-android/scope.md学习 Koin 的范围

如果我有一个 Koin 模块如下

val myModule =
    module {
        scope<MyActivity> { scoped { Presenter() } }
    }
Run Code Online (Sandbox Code Playgroud)

在我的活动中,我可以做到这一点

class MyActivity : AppCompatActivity() {

    private val presenter by lazy {
        lifecycleScope.get<Presenter>(Presenter::class.java)
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者我可以使用this.scopewhere thisis MyActivityobject。

class MyActivity : AppCompatActivity() {

    private val presenter by lazy {
        this.scope.get<Presenter>(Presenter::class.java)
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我测试过它们是一样的。两者是一样的,还是不同的?如果它们不同,它们的区别是什么?

android android-lifecycle kotlin koin koin-scope

4
推荐指数
1
解决办法
1742
查看次数

如何在 Android 上使用协程进行不间断取消,包括根据生命周期自动取消?

背景

AsyncTask我在从简单(已弃用)迁移到Android 时Executors遇到问题Kotlin Coroutines

问题

我无法找到如何执行我可以在AsyncTask甚至Executors使用上完成的基本操作Kotlin Coroutines

过去,我可以选择在有或没有线程中断的情况下取消任务。现在,出于某种原因,考虑到我在协程上创建的任务,它只是不间断的,这意味着如果我运行一些甚至在其中“睡眠”的代码(并不总是由我执行),它就不会被中断。

我还记得有人告诉我,协程在 Android 上非常好用,因为如果你在 Activity 中,它会自动取消所有任务。但我找不到如何做到这一点的解释。

我尝试过并发现了什么

对于协程任务(Deferred根据我所看到的调用),我想我已经读到,当我创建它时,我必须选择它将支持哪种取消,并且由于某种原因我不能同时拥有它们。不确定这是否属实,但我仍然想知道,因为我想同时拥有两者以获得最佳迁移。我曾经使用 AsyncTask 将它们添加到一个集合中(并在取消时将其删除),以便在 Activity 完成后,我可以查看所有内容并取消它们。我什至为我开设了一个很好的课程。

这是我为了测试这个而创建的:

class MainActivity : AppCompatActivity() {
    val uiScope = CoroutineScope(Dispatchers.Main)
    val bgDispatcher: CoroutineDispatcher = Dispatchers.IO

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        loadData()
    }

    private fun loadData(): Job = uiScope.launch {
        Log.d("AppLog", "loadData")
        val task = async(bgDispatcher) {
            Log.d("AppLog", "bg start")
            try {
                Thread.sleep(5000L) //this could be any executing …
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-lifecycle android-asynctask kotlin-coroutines

4
推荐指数
2
解决办法
4439
查看次数

Jetpack compose - 当应用程序返回前台时如何刷新屏幕

当应用程序返回到前台时,我需要自动刷新 Android Compose 屏幕。

我有一个需要权限和位置服务的。

如果用户关闭了其中的任何一个,则会绘制一个包含需要更改的项目的列表。当用户转到“设置”并且应用程序返回到前台时,我希望刷新列表以反映更改。

我正在使用 Compose 和 Compose 导航。我已经看过了,但无法弄清楚可用于触发刷新的 onResume 生命周期事件的等效项。

任何想法将不胜感激,因为我不知所措。

android android-lifecycle android-jetpack-compose

4
推荐指数
5
解决办法
1822
查看次数

ActivityLifecycleCallbacks 不会触发

我正在制作一个消息应用程序,为了设置用户的状态,我必须跟踪我的应用程序的状态。当我运行 apk 时,无论应用程序的状态如何,ActivityLifecycleCallbacks 都不会触发。我已经尝试了迄今为止发现的所有可能的修复方法,但没有一个成功。这是代码:

public class AppState extends Application implements Application.ActivityLifecycleCallbacks {

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e("AppState ", "onCreate");
        registerActivityLifecycleCallbacks(this);
    }

    @Override
    public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
        Log.e("onActivityCreated", activity.getLocalClassName());
    }

    @Override
    public void onActivityStarted(Activity activity) {
        setLastSeen(KEY_LAST_SEEN_ONLINE);
    }

    @Override
    public void onActivityResumed(@NonNull Activity activity) {
        Log.e("onActivityResumed", activity.getLocalClassName());
    }

    @Override
    public void onActivityPaused(@NonNull Activity activity) {
        Log.e("onActivityPaused", activity.getLocalClassName());
    }

    @Override
    public void onActivityStopped(Activity activity) {
        setLastSeen(String.valueOf(System.currentTimeMillis()));
    }

    @Override
    public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-activity

4
推荐指数
1
解决办法
1410
查看次数

如何挂钩Android应用程序生命周期?

Android支持Activity通过生命周期挂钩,Application.ActivityLifecycleCallbacks但我找不到轻松挂钩的方法Application.为什么Application生命周期中没有类似的界面?

我想知道一个应用程序是否在后台/前台,我不想手动进行计数(可行使用Application.ActivityLifecycleCallbacks).

我正在开发一个Android库,其中一个用例需要知道包含lib的应用程序是否在后台/前台.

我看到包中有一个ApplicationLifecycleCallback接口android.support.test.runner.lifecycle(仅用于测试).为什么不在android.app包装内暴露类似的东西Application.ActivityLifecycleCallbacks呢?

如何完成我的用例?你会如何实现它?

任何提示/想法/解决方法都非常受欢迎.非常感谢!

android background-foreground android-lifecycle

3
推荐指数
1
解决办法
776
查看次数