标签: android-lifecycle

静态变量在两个活动之间不起作用

我有两项活动 A 和 B。

public class A extends Activity 
{
....
@Override
    protected void onResume()
    {
    super.onResume();
    if(MyStaticVarz.myFlag)
    {
                    MyStaticVarz.myFlag= false;
        SomeTask();
    }

}
Run Code Online (Sandbox Code Playgroud)

MyStaticVarz.java:

public class MyStaticVarz
{
    public static boolean myFLag = false;
}
Run Code Online (Sandbox Code Playgroud)

从 A 转到 B 并将 myFlag 更改为 true,如下所示:

MyStaticVarz.myFlag = true;
Run Code Online (Sandbox Code Playgroud)

并再次返回 A,但在 onResume 中 if(MyStaticVarz.myFlag) 为 false 并且未到达 SomeTask()。

从A到B就像:

Intent i = new Intent(A.this, B.class);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

更新 SomeTask() 用于更改 A 和 B 中文本的字体大小。

myFlag 用于按需重新初始化 UI,如果字体设置发生更改,则运行 SomeTask()。

当单击 B 中的选项菜单并更改字体大小,然后转到 B 时,我看到更改,但当返回 …

static android android-lifecycle android-activity

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

Android 应用程序:onResume() 和 onStart()

我已经阅读了文档onResume()onStart()但我仍然不清楚的一件事是在什么情况下会在没有onResume()被调用的情况下被调用? onStart()

android android-lifecycle

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

如果之前没有调用过 onResume(),是否有可能调用 onPause()?

onResume()onPause()方法中注册接收器并取消注册它。我的 Crashlytics 报告中可能出现奇怪的错误:

Fatal Exception: java.lang.RuntimeException
Unable to pause activity {package-here}: java.lang.IllegalArgumentException: Receiver not registered: 

Caused by java.lang.IllegalArgumentException
Receiver not registered:
Run Code Online (Sandbox Code Playgroud)

它在 20k 安装中发生了 3 次(3 个用户)。

如果之前没有调用过 onResume(),是否有可能调用 onPause()?我以为不是。

android illegalargumentexception receiver activity-lifecycle android-lifecycle

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

如何在 RecyclerView 中使用 DataBinding 和 LiveData

因此 DataBinding 现在可以在其绑定中使用 LiveData。作为其中的一部分,我们还必须将生命周期设置为数据绑定,如下所示:

SampleLayoutBinding binding = DataBindingUtil.inflate(this, R.layout.sample_layout)
binding.setLifeCycleOwner(this)
Run Code Online (Sandbox Code Playgroud)

我的问题是在 recyclerview 中设置这个生命周期所有者的正确方法是什么?或者更恰当地说,在 recyclerview 中使用数据绑定时,我们是否需要设置 LifeCyclerOwner?

android-lifecycle android-recyclerview android-livedata

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

Android中的“ finishAffinity();”和“ finish()”方法有什么区别?

我在登录屏幕上使用了一些代码,如果用户不想登录,则该应用程序会强制关闭应用程序。如果用户选择不登录/取消,则它将调用该代码以退出应用程序。我已经成功完成了这两种方式的操作(不是同时):

finishAffinity();
 System.exit(0);
Run Code Online (Sandbox Code Playgroud)

finish();
 System.exit(0);
Run Code Online (Sandbox Code Playgroud)

然而,这两行代码似乎都在做相同的事情...该应用程序对用户关闭,但如果用户单击“概述”按钮,他们可以选择重新打开该应用程序,但仍保留在后台应用程序中以重新打开。(这只是重新启动提示以登录。)

由于没有发现功能上的差异,因此我想知道finishAffinity()finish()方法之间的区别是什么?

奖励问题:另外,有没有办法完全关闭该应用程序,因此它也不会出现在概述按钮应用程序列表中?

java performance android android-lifecycle

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

当我从其他屏幕导航到初始路由时,为什么 componentDidMount 不执行?

我正在为我的移动应用程序使用 react-navigation,我有 2 条路线 - Home 和 Favoriti,其中 Home 是初始路线。这两个组件都有 componentDidMount。每当我从 Home 导航到 Favoriti 时,Favoriti 组件都会挂载,但是当我导航回 Home 时,它​​的 componentDidMount 不会执行。它仅在我第一次打开应用程序时执行,但我每次导航到它时都需要挂载它。

import { createStackNavigator, createAppContainer} from 'react-navigation';
import  Home  from './views/Home';
import Favoriti from './views/Favoriti';

const MainNavigator = createStackNavigator({

    FavoritiRT: Favoriti,
    HomeRT: Home
  },
  {
    initialRouteName: "HomeRT"
  }
);

const MyRoutes = createAppContainer(MainNavigator);

export default MyRoutes;
Run Code Online (Sandbox Code Playgroud)

没有错误显示,只是初始路由的 componentDidMount 不会在我每次导航到它时执行,但在其他路由中它会执行。

javascript navigation android-lifecycle react-native react-native-android

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

为什么 Kotlin 的新 LiveData 构建器可能更新在我的项目中不起作用

在此处输入图片说明

这是我的依赖项:

 //Room and Lifecycle Libraries
    kapt "androidx.room:room-compiler:2.2.0-alpha02"
    kapt 'androidx.room:room-compiler:2.2.0-alpha02'
    kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-alpha03"
    implementation "androidx.room:room-runtime:2.2.0-alpha02"
    implementation 'androidx.room:room-runtime:2.2.0-alpha02'
    implementation "androidx.lifecycle:lifecycle-viewmodel:2.2.0-alpha03"
    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-alpha03"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha03"
    implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03"
    implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
Run Code Online (Sandbox Code Playgroud)

如您所见,我实现了最终版本,但我无法访问 liveData 构建器。我怎样才能解决这个问题?

android viewmodel android-lifecycle kotlin android-livedata

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

当应用程序从后台转到前台时,Android launchWhenResumed 不会被调用

在我的片段中,

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        Log.e(TAG, "Inside on view created")

        lifecycleScope.launchWhenResumed {
            Log.e(TAG, "Inside lifecyclescope get data")
            viewModel.getData().collect {
              // ....
            
            }
        }
    }

    override fun onResume() {
        Log.e(TAG, "Inside on resume")
        super.onResume()
    }
Run Code Online (Sandbox Code Playgroud)

以下是不同场景下的日志序列 -

  1. 当应用程序刚刚打开时 -

    视图内部已创建

    简历里面

    在生命周期范围内获取数据

  2. 当从一个片段回到这个片段时 -

    视图内部已创建

    简历里面

    在生命周期范围内获取数据

现在问题来了...

  1. 当应用程序从后台进入前台时 -

    简历里面

如您所见,我只看到onResume()日志,但我也希望日志Inside lifecyclescope get data出现。我在这里做错了什么吗?

android android-lifecycle kotlin kotlin-coroutines

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

使用 viewLifecycleOwner 时出现未解决的引用错误

我在我的 android 项目中使用 Observer 和 viewLifecycleOwner 时遇到错误。它抛出“未解析的引用:viewLifecycleOwner”错误,我不知道为什么。我确认我有进口

import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
Run Code Online (Sandbox Code Playgroud)

以及依赖关系:

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
Run Code Online (Sandbox Code Playgroud)

我尝试过使缓存无效/重新启动...在 GitHub 中找到的解决方案。但错误仍然存​​在。感谢任何可以帮助我的人。

class MainActivity : AppCompatActivity() {
    private lateinit var viewModel: DrinkViewModel

    // Contains all the views
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

        // Use Data Binding to get reference to the views
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        binding.drinkButton.setOnClickListener {
            onDrinkClicked()
        }

        viewModel.revenue.observe(viewLifecycleOwner, Observer { newRevenue ->
            binding.revenueText.text = newRevenue.toString()
        })

        viewModel.drinksSold.observe(viewLifecycleOwner, Observer { newAmount -> …
Run Code Online (Sandbox Code Playgroud)

android-lifecycle kotlin android-studio android-databinding

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

如果无论如何都在 Activity 更改时调用 onCreate 和 onStart 之间的区别在哪里?目的是什么?

我搜索了数十篇 Stackoverflow 帖子和 android 文档,但找不到答案。

根据此 SF-post的公认答案,onCreate 方法在首次创建活动时运行。它还指出,在这里应该创建视图并绑定列表数据。

然后 onStart 方法运行,但这就是问题所在。区别在哪里?如果您在 onCreate 中执行所有操作,切换活动,您的应用仍将显示相同的数据,无论您是将应用置于后台还是切换活动。

所以如果你在 onCreate 中声明视图,你在 onStart 中做什么?初始化视图到他们的 R.id.view ?获取数据?

我想 onResume 然后用于听众,因为根据这个 SF-posts 接受的答案,它是油门和刹车。

java android android-lifecycle android-activity

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