标签: android-lifecycle

Android Studio 不允许我使用 RepeatOnLifecycle

我想从 viewModel 观察片段内的数据,但 Android Studio 不断触发此警告。有人可以帮助解决这个问题吗?这个问题是否与 Android Studio Bumbleblee 的更新有关? 在此输入图像描述

android android-lifecycle kotlin android-studio kotlin-coroutines

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

片段生命周期与它的活动有关

情况 我的活动等待异步操作,在它从异步操作中听到后,它需要将信息传递给其中的2个片段.

要求 1.两个片段都需要完成他们的onCreateView调用才能使他们的布局被加载,2.他们需要将自己附加到他们的活动以便getActivity()工作.

setData()在两个片段中都编写了一个方法,并在活动的生命周期中寻找"正确"的位置来调用它们.

onCreate()活动不起作用,onStart()活动不起作用onStart(),碎片不起作用.

什么都行不通,我在这里缺少什么?

android fragment android-lifecycle

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

在FragmentTransaction.replace()后跟后退按钮后,不会重新创建ViewPager片段

我正在尝试实现保存和恢复状态,但是当用Fragmenta 替换main PreferenceFragment然后按下后退按钮时遇到问题.我的主要Fragment包括ViewPager一个FragmentPagerAdapter用3 Fragments来刷卡.点击后退按钮后,没有调用Fragment.onCreateView()我的3 Fragment秒的回调.我已经尝试了所有我在这里遇到的解决方案,但我无法解决这个问题.

另一个可能需要注意的重要事项是,我的3s ViewPager Fragment的数据存储在单独的类中,这些类是实例化的,可以通过Activity.3 Fragments包含RecyclerView用于列出大量数据的s.这样做是为了清洁,但也是为了使这些数据持续存在Activity.这可能不是问题,因为它在启动应用程序时工作正常,但也因为主要问题是我Fragments没有重新创建.

意外行为:

在应用程序创建时,一切正常,但是当我用另一个替换我的main Fragment(包含ViewPagera FragmentPagerAdapter),然后按下后退按钮时,不会重新创建Fragments中的s ViewPager.在onCreateView()我的主要的Fragment 调用.

问题:

我错过了什么?是否还应该创建一些其他回调?我应该在哪里以及如何重建Fragments

我试过了什么:

  1. 改变了FragmentAdapter使用,但我真的应该使用这里getSupportFragmentManager()的解决方案.

编辑:使用错误FragmentManager实际上我的麻烦的来源.请参阅下面的答案.

  1. 添加 @Override public int getItemPosition(Object object) {return POSITION_NONE;}FragmentPagerAdapter,如此处所示. …

android android-lifecycle android-fragments android-viewpager

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

公共静态变量和Android活动生命周期管理

根据文档,Android操作系统可以杀死后端堆栈后面的活动.

所以,例如我说有一个应用程序并打开主要活动(让我们称之为活动A).在这个公共活动类中,我声明并初始化一个公共静态变量(让我们称之为"foo").在Activity A的onCreate()方法中,我然后更改"foo"的值.从活动A开始,用户在我的应用程序中启动另一个名为Activity B的活动.在活动B中使用变量"foo".在用户导航到其他应用程序中的某些其他活动后,活动B将暂停.最终,在发生内存不足之后,可以杀死活动A然后活动B. 用户导航回我的应用程序后,它会重新启动(实际上是"重新创建")活动B.

怎么了:

  1. 当活动A的onCreate()方法运行时,此时变量"foo"是否具有设置的值?

  2. 变量"foo"不存在?

  3. 变量"foo"存在,但现在是初始化值,而不是Activity A的onCreate()方法中设置的值?

java static android android-lifecycle android-activity

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

最小的Android前台服务在高端手机上被杀死

我正在尝试创建一个允许用户记录路线(位置/ GPS)的应用程序.为了确保即使屏幕关闭也会记录位置,我已经foreground service为位置记录创建了一个.我将位置存储在一个Room Database注入我的服务中的位置Dagger2.

但是,这项服务被Android杀死,当然这并不好.我可以订阅低内存警告,但这并没有解决我的服务在运行Android 8.0的现代高端手机上大约30分钟后被杀的根本问题

我创建了一个只有"Hello world"活动和服务的最小项目:https://github.com/RandomStuffAndCode/AndroidForegroundService

该服务在我的Application课程中启动,路由记录通过以下方式启动Binder:

// Application
@Override
public void onCreate() {
    super.onCreate();
    mComponent = DaggerAppComponent.builder()
            .appModule(new AppModule(this))
            .build();

    Intent startBackgroundIntent = new Intent();
    startBackgroundIntent.setClass(this, LocationService.class);
    startService(startBackgroundIntent);
}

// Binding activity
bindService(new Intent(this, LocationService.class), mConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT);
// mConnection starts the route logging through `Binder` once connected. The binder calls startForeground()
Run Code Online (Sandbox Code Playgroud)

我可能不需要BIND_AUTO_CREATE旗帜,我一直在测试不同的旗帜,试图不让我的服务被杀 - 到目前为止没有运气.

使用分析器看起来我没有任何内存泄漏,内存使用率稳定在~35mb:

探查

使用adb shell dumpsys activity …

android android-service android-location android-lifecycle android-doze

26
推荐指数
2
解决办法
8112
查看次数

什么时候实际使用了savedInstanceState包?

有没有人知道在活动中何时使用savedInstanceState包的详尽列表?

我知道它在设备方向改变时使用.但是,当用户强制从Android设置关闭应用程序时似乎没有使用它,但这可能是由于我的代码中的某些内容.

还有哪些其他案例?

要清楚,"used"是指onCreate()调用时,savedInstanceState包不为null,并包含我上次onSaveInstanceState()调用时传入的数据.

android android-lifecycle android-activity

25
推荐指数
2
解决办法
3万
查看次数

setContentView和LayoutInflater有什么区别?

我正在创建一个包含多个片段的选项卡列表.我注意到,在主要活动中,我曾经setContentView获得布局xml并用于findViewById获取相应的UI元素配置.

setContentView(R.layout.fragment_tabs);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabManager = new TabManager(this, mTabHost, android.R.id.tabcontent);
Run Code Online (Sandbox Code Playgroud)

但是,在不同的片段类中,我必须使用inflater.

View v = inflater.inflate(R.layout.webview, container, false);
WebView myBrowser=(WebView)v.findViewById(R.id.mybrowser);
Run Code Online (Sandbox Code Playgroud)

并且这两个函数都用于获取布局xml来创建一个对象,为什么会有区别?是第一个使用期间onCreate,第二个期间使用onCreateView?在什么情况下我应该选择其中之一?

layout android xml-parsing android-lifecycle layout-inflater

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

如果已登录,请正确跳过登录活动

我的启动器图标当前启动登录活动.我已将登录状态存储在SharedPreferences中.有没有办法正确跳过登录活动,直接进入主要活动,没有任何 UI故障.涉及所有现有的解决方案,finish()onCreate()事业登录活动标题简要可见或其他一些简单的黑屏故障的用户界面.

android android-lifecycle android-activity android-launcher

25
推荐指数
1
解决办法
2万
查看次数

当活动被破坏时,活动背叛的不当行为

我有两个活动; 假设A和B activity A是有广播接收器注册侦听将完成活动A.我注册的广播接收器的特定事件 onCreate(),并摧毁它onDestroy()activity A.

为简单起见,有一个buttonactivity B名为"破坏活性的A".当用户点击时button,activity A应该销毁.

通常所有这些都运行顺利,没有任何问题,但问题出现在以下场景中:

1)假设我在activity B,我按Home键将应用程序移动到后台然后如果我使用其他资源繁重的应用程序,Android系统将杀死我的应用程序以释放内存.然后,如果我最近的任务打开我的应用程序时,activity B将被收回,这是onCreate(),onResume()等方法将被调用.现在我按button摧毁activity A,但活动A已经被破坏,所以activity AonCreate(),onResume()等方法将不会被调用之前,除非我去activity Aback button.因此broadcast receiver没有注册来监听事件.

2)当用户在设备的设置中从Developer选项中选择"Do not keep activities"时,会出现同样的问题.

我一直在寻找解决这个问题很长一段时间,但我无法找到合适的答案.处理这种情况的最佳方法是什么?这是Android的错误吗?这个问题应该有一些解决方案.

请帮我.

android broadcastreceiver android-lifecycle android-activity back-stack

25
推荐指数
2
解决办法
1402
查看次数

Android - 在卸载时保留或删除应用程序创建的文件

我创建了一个创建文件并将文件存储到SD卡的应用程序.有没有办法将文件夹与应用程序绑定,以便在用户在Android设备上运行卸载时删除所有文件?

backup android uninstall android-lifecycle android-backup-service

24
推荐指数
3
解决办法
3万
查看次数