Questions tagged «android-lifecycle»

有关系统在Android应用程序中在组件生命周期内转发给组件的事件的问题。大多数组件都具有特定的生命周期。这个标签不应该单独使用:与[android-activity],[android-service]和[android-broadcastreceiver]标签一起使用。



18
注销时,清除“活动历史记录”堆栈,以防止“后退”按钮打开仅登录的活动
我的应用程序中的所有活动都需要用户登录才能查看。用户几乎可以退出任何活动。这是应用程序的要求。无论何时用户注销,我都想将用户发送到Login Activity。此时,我希望此活动位于历史记录堆栈的底部,以便按下“后退”按钮可使用户返回Android的主屏幕。 我已经看到这个问题在几个不同的地方问过,所有问题都得到了相似的答案(我在这里概述了),但是我想在这里提出来收集反馈。 我尝试通过设置其Intent标志FLAG_ACTIVITY_CLEAR_TOP似乎按照文档中所述进行操作来打开Login活动,但是并没有实现将Login活动放在历史记录堆栈底部并防止用户向后导航的目标。以前看过的登录活动。我也尝试android:launchMode="singleTop"在清单中用于Login活动,但这也没有实现我的目标(而且似乎也没有任何作用)。 我相信我需要清除历史记录堆栈,或完成所有先前打开的活动。 一种选择是让每个活动的onCreate检查都处于登录状态,finish()如果尚未登录则。我不喜欢此选项,因为后退按钮仍然可以使用,随着活动自身关闭,它可以返回。 下一个选项是维护LinkedList对所有打开的活动的引用,这些引用可以从任何地方静态访问(可能使用弱引用)。注销后,我将访问此列表并遍历所有先前打开的活动,并finish()在每个活动上进行调用。我可能很快就会开始实现此方法。 但是,我宁愿使用一些Intent标记技巧来完成此操作。我很高兴发现自己可以满足我的应用程序要求,而不必使用上面概述的两种方法中的任何一种。 有没有一种方法可以通过使用Intent或清单设置来实现,或者我的第二个选择是保持LinkedList打开的活动是最好的选择?还是我完全忽略了另一个选择?

9
应用程序重启而不是重启
希望有人能帮助我找出(如果不是解决方案的话)至少是一种行为的解释。 问题: 在某些设备上,按下启动器图标会导致当前任务恢复,而在其他设备上,会导致触发初始启动意图(有效地重新启动应用程序)。为什么会这样? 细节: 当您按下“启动器图标”时,应用程序将正常启动-也就是说,我假设启动了一个Intent,其中包含您的第一个Activity操作android.intent.action.MAIN和类别的名称android.intent.category.LAUNCHER。但是,情况并非总是如此: 在大多数设备上,如果在应用程序已运行后按启动器图标,则将恢复该进程中当前正在运行的活动(不是 initial Activity)。它的恢复方式与从OS菜单的“近期任务”中选择它的方式相同。这是我想要在所有设备上的行为。 但是,在选定的其他设备上,会发生不同的行为: 在Motorola Xoom上,当您按启动器图标时,无论当前正在运行什么,该应用程序将始终启动初始启动Activity。我假设启动器图标始终启动“ LAUNCHER”意图。 在Samsung Tab 2上,当按启动器图标时,如果您刚刚安装了该应用程序,它将始终启动初始程序Activity(与Xoom相同)-但是,在安装后重新启动设备后,启动器图标将改为恢复应用程序。我假设这些设备在设备启动时将“已安装的应用程序”添加到查找表中,从而允许启动器图标正确恢复正在运行的任务? 我读过很多回答的声音类似我的问题,但简单地添加android:alwaysRetainTaskState="true"或使用launchMode="singleTop"的Activity并不是答案。 编辑: 在此应用程序的最新启动后,我们发现在第一次重新启动后,所有设备上都开始出现此现象。这对我来说似乎很疯狂,但是在重新启动过程中,我实际上找不到问题所在。

8
一个活动和所有其他片段
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 6年前关闭。 改善这个问题 我想实现一个屏幕,Activity和所有其他sreens与Fragments和managing all the fragments thru the activity。 这是个好主意吗?我的回答是“ 否”,但我仍然想更清楚地了解这种想法。 这个想法有什么优点和缺点? 注意: 请不要给我有关片段和活动的链接。 编辑: 以下是有关片段和活动的一些信息: 优点: 片段应与活动一起用作子活动。 碎片不是活动的替代品。 片段旨在实现可重用性(需要知道以何种方式可以实现可重用性。)。 片段是编写支持平板电脑和手机的代码的最佳方法。 缺点: 我们需要实现接口以从片段中获取数据。 对于对话,我们必须走很长的路才能显示出来。 如果不考虑使用平板电脑,为什么还要使用碎片?活动和片段之间的开始时间差是多少?

12
如何摆脱增量注释处理请求的警告?
我刚刚开始使用android开发并尝试使用Room库。从昨天开始我就面临着这个警告信息 w:[kapt]请求了增量注释处理,但是由于以下处理器不是增量处理器而被禁用:androidx.lifecycle.LifecycleProcessor(NON_INCREMENTAL),androidx.room.RoomProcessor(NON_INCREMENTAL)。 我试图研究和修复,但无法避免此错误,这是我的grale.build文件。请提出建议/建议我在做什么错。 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "ps.room.bookkeeper" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation":"$projectDir/schemas".toString()] } } buildTypes { release { minifyEnabled false …


11
java.lang.IllegalStateException:片段未附加到活动
进行API调用时很少遇到此错误。 java.lang.IllegalStateException: Fragment not attached to Activity 我尝试将代码放入isAdded()方法中,以检查当前是否将片段添加到其活动中,但是我仍然很少收到此错误。我不明白为什么我仍然会收到此错误。我该如何预防呢? 它在网上显示错误- cameraInfo.setId(getResources().getString(R.string.camera_id)); 以下是我正在制作的示例api调用。 SAPI.getInfo(getActivity(), new APIResponseListener() { @Override public void onResponse(Object response) { cameraInfo = new SInfo(); if(isAdded()) { cameraInfo.setId(getResources().getString(R.string.camera_id)); cameraInfo.setName(getResources().getString(R.string.camera_name)); cameraInfo.setColor(getResources().getString(R.string.camera_color)); cameraInfo.setEnabled(true); } } @Override public void onError(VolleyError error) { mProgressDialog.setVisibility(View.GONE); if (error instanceof NoConnectionError) { String errormsg = getResources().getString(R.string.no_internet_error_msg); Toast.makeText(getActivity(), …

6
当我的应用程序进入后台时,如何防止Android截屏?
我当前正在构建的应用程序要求该应用程序必须防止操作系统出于安全原因将其推入后台时截取该应用程序的屏幕截图。这样,当在应用程序之间切换时,它将无法看到上一个活动屏幕。 我打算将此功能放在应用程序类的onPause方法中,但首先我需要了解如何实现此功能。 那么,有没有人知道如何解决此问题?

6
在Android中使用片段而不是视图有什么好处?
为进行开发时Android,您可以将目标(或最低)sdk设置为4(API 1.6),并添加android兼容性软件包(v4)以添加对的支持Fragments。昨天,我这样做了,并成功实现Fragments了可视化来自自定义类的数据。 我的问题是:与Fragments仅从自定义对象获取View并仍支持API 1.5相比,使用它有什么好处? 例如,假设我有Foo.java类: public class Foo extends Fragment { /** Title of the Foo object*/ private String title; /** A description of Foo */ private String message; /** Create a new Foo * @param title * @param message */ public Foo(String title, String message) { this.title = title; …

5
究竟何时调用onSaveInstanceState()和onRestoreInstanceState()?
下图(来自官方文档)描述了Android活动的众所周知的生命周期: 另一方面,当活动被系统销毁时(例如,由于需要回收内存),活动状态有时会通过方法和自动保存和恢复,如下图所示(也来自官方文档):onSaveInstanceState()onRestoreInstanceState() 我知道 onSaveInstanceState()是不是总叫当活动即将被销毁。例如,如果由于用户按下“后退”按钮而将其销毁,则不会保留活动状态。但是在状态被保存,恢复和onSaveInstanceState()/ onRestoreInstanceState()或被调用的情况下,究竟何时调用它们? 例如,根据以上附图,onRestoreInstanceState()可能在之前onStart()或之后被调用,onStart()但是在之前onResume()或之后被调用onResume()。同样,存在多种可能性onSaveInstanceState()。那么什么时候确切地称呼他们呢? 理想情况下,我希望看到一张显示活动生命周期状态和save / restore方法(如果存在)的组合图。

4
Android静态对象生命周期
我正在创建事件搜索应用程序,我们从一个屏幕设置搜索条件,然后在另一个屏幕中填充,然后用户可以从第三个屏幕编辑搜索条件,然后转到第四个屏幕。 为了实现上述任务,我正在使用静态对象,该对象记住应用程序周围的值,而我不需要做任何其他事情。 但我担心,如果内存不足,Android会删除静态对象? 由于android支持多任务处理,如果用户切换到另一个应用程序,并且当用户回来时应用程序开始疯狂执行操作,则静态对象在执行多任务处理时是否会被移除?任何想法 ??并建议通过单例方法持有静态对象是更好的方法

7
在onPause,onStop和onDestroy方法中调用超类方法的正确顺序是什么?为什么?
我刚浏览了Android开发者网站,刷新了活动生命周期,在每个代码示例中,超类方法旁边都有一条注释,上面写着“始终先调用超类方法”。 虽然这在创建半周期(onCreate,onStart和onResume)中是有意义的,但对于销毁半周期的正确过程是什么,我还是有些困惑:onPause,onStop,onDestroy。 首先销毁实例专用资源,然后销毁实例专用资源可能依赖的超类资源,这是有道理的,而不是相反。我想念什么? 编辑:由于人们似乎对这个问题的意图感到困惑,所以我想知道以下哪个是正确的?为什么? 1,谷歌建议 @Override protected void onStop() { super.onStop(); // Always call the superclass method first //my implementation here } 2.另一种方式 @Override protected void onStop() { //my implementation here super.onStop(); }

8
如何使用onResume()?
谁能给我一个onResume()在Android中使用的示例吗? 另外,如果我想在另一个人的执行,该方法是executed-年底重新启动的活动onCreate()或onResume()? 如果我想更新数据,该如何放入 onResume()?

4
是在onActivityResult()之前调用onResume()吗?
这是我的应用程序的布局方式: 提示onResume()用户登录 如果用户登录,他可以继续使用应用程序 3。如果用户随时注销,我想再次提示登录 我该如何实现? 这是我的MainActivity: @Override protected void onResume(){ super.onResume(); isLoggedIn = prefs.getBoolean("isLoggedIn", false); if(!isLoggedIn){ showLoginActivity(); } } 这是我的LoginActivity: @Override protected void onPostExecute(JSONObject json) { String authorized = "200"; String unauthorized = "401"; String notfound = "404"; String status = new String(); try { // Get the messages array …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.