问题标签 [android-lifecycle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android - 保留或删除应用程序在卸载时创建的文件
我创建了一个应用程序,它创建文件并将其存储到 sdcard。有没有办法将文件夹与应用程序绑定,以便在用户在 android 设备上运行卸载时删除所有文件?
android - Android 静态对象生命周期
我正在创建事件搜索应用程序,我们从一个屏幕设置搜索条件填充到另一个屏幕,然后用户可以从第三个屏幕编辑搜索条件并进入第四个屏幕。
为了完成上述任务,我使用了静态对象,它记住了应用程序周围的值,我不需要做任何额外的事情。
但是如果发现内存不足,我担心android中的静态对象生命周期会删除静态对象???
由于android支持多任务,如果用户切换到另一个应用程序并且当用户回来时应用程序开始疯狂,当它执行多任务时静态对象会被删除吗???任何的想法 ??并且还建议通过单例方法保存静态对象是更好的方法???
android - Android 上最“抗死”的组件是什么?
我正在寻找最合适的类作为从我的活动调用的 AsyncTasks 的调度程序。
我认为它可能是其中之一:
- 应用程序的子类;
- 服务的子类;
- 我自己的静态东西。
至于我 - 实施第三个选择更简单。但问题是它会比服务或应用程序更“抗死”吗?此外,什么会活得更久也很有趣——应用程序还是服务?我的猜测是,只要应用程序(Android 中的任务)进程存在,应用程序就会存在。
所以基本上我需要根据它们的“抗死亡”质量来划分这些选项,因为我想依赖最“静态”的东西。
更新:
最初这个问题是在2010年提出的,当时 (1) Android 是开发人员的新平台,并且 (2) Google 文档对应用程序组件生命周期和整个应用程序流程生命周期过于含糊(在某些情况下甚至具有误导性) .
android - 注销时,清除活动历史堆栈,防止“返回”按钮打开仅登录的活动
我的应用程序中的所有活动都需要用户登录才能查看。用户几乎可以退出任何活动。这是应用程序的要求。在任何时候,如果用户注销,我想将用户发送到 Login Activity
。此时,我希望此活动位于历史堆栈的底部,以便按下“返回”按钮将用户返回到 Android 的主屏幕。
我在几个不同的地方看到过这个问题,所有的答案都相似(我在这里概述),但我想在这里提出它以收集反馈。
我尝试通过设置其Intent
标志来打开登录活动,FLAG_ACTIVITY_CLEAR_TOP
这似乎与文档中概述的一样,但没有实现将登录活动放在历史堆栈底部并阻止用户导航回来的目标以前看到的登录活动。我也尝试android:launchMode="singleTop"
在清单中使用登录活动,但这也没有实现我的目标(而且似乎无论如何都没有效果)。
我相信我需要清除历史堆栈,或者完成所有以前打开的活动。
一种选择是让每个活动的onCreate
检查登录状态,finish()
如果没有登录。我不喜欢这个选项,因为后退按钮仍然可以使用,在活动自行关闭时导航回来。
下一个选项是维护LinkedList
对所有开放活动的引用,这些活动可以从任何地方静态访问(可能使用弱引用)。注销时,我将访问此列表并遍历所有先前打开的活动,并调用finish()
每个活动。我可能很快就会开始实施这种方法。
但是,我宁愿使用一些Intent
标志技巧来完成此操作。我很高兴发现我可以满足我的应用程序的要求,而无需使用上面概述的两种方法中的任何一种。
有没有办法通过使用Intent
或清单设置来实现这一点,或者我的第二个选择是保持一个LinkedList
打开的活动是最好的选择?还是有另一个我完全忽略的选择?
java - 恢复活动时“线程已启动”
这是我的情况:我正在为 android 构建一个游戏,我的游戏活动由一个自定义的 surfaceView 组成,它有一个用于游戏逻辑和渲染的线程。该架构类似于 Google 网站上的 LunarLander 演示。
当活动启动时,它会创建表面视图并调用此方法:
当我按下home键退出游戏时,调用了onPause()方法,该方法调用了surfaceDestroyed()。在 surfaceDestroyed 我通过调用停止游戏线程:
该应用程序进入后台正常。然后,当我通过按图标重新启动应用程序时,我会在日志中收到“线程已启动”消息以及屏幕上的“强制关闭”弹出窗口。当活动在渲染线程上调用 start() 时进入“surfaceCreated”方法时,会发生此消息。
现在我已经研究了几个小时,无法弄清楚为什么会这样。我相信当我关闭应用程序时我的线程已停止,所以我不明白为什么它说它已经开始了。
android - 旋转具有两个活动的设备时出现程序流程问题
我的第一个活动是在其 onCreate 中创建第二个活动:
第二个活动具有用户名和密码的 EditText 视图以及提交和取消按钮。当按下任一按钮时,来自用户名和密码的文本将被发送回活动一(通过 onActivityResult),该活动连接到服务器以查看用户名是否可用。连接到服务器时,showDialog 用于显示 ProgressDialog。当服务器响应时,ProgressDialog 被关闭并显示一个 AlertDialog。只要设备不旋转,它就可以正常工作。
这就是问题所在:如果用户从第二个活动中旋转设备并推送提交,第一个活动会重新调用其 onCreate,由于用户名和密码仍然为空,因此最终会再次启动第二个活动。
有没有人有任何建议来解决这个问题?
是否有一种方法可用于将数据从活动 2 传递到活动 1 的 onCreate?在这种情况下,我不想使用数据库,因为这似乎有点矫枉过正。
我曾考虑将服务器通信和对话包含在活动 2 中,但后来我在活动 1 和活动 2 中有重复的服务器代码(活动 1 也连接到服务器以进行其他操作)。这种方法的另一个问题是用户可以选择取消创建密码,在这种情况下我希望应用程序完成。如果我从活动 2 中调用完成,则会出现活动 1,除非创建了用户名和密码,否则我不希望它显示。
我突然想到 - 如果我可以用对话框替换活动 2,它可能会使事情变得更简单。对话框视图需要有 2 个 EditTexts 和 2 个按钮。我可以创建这样的东西并使用 showDialog 方法吗?还有其他想法吗?
android - 在 Android 中,如何检测我的活动恢复的原因?
我正在开发一个 Activity 来做一些自己的状态管理。我试图区分以下 onResume 案例:
- 新品发布
- 任务切换(home键长按)
- 在同一应用程序中的其他活动后恢复
- 睡后醒来
- 方向改变
Activity 的意图或其他地方有什么东西可以帮助我区分这些吗?
对于好奇和一些上下文......我想在 4 和 5 上保留我的内部历史堆栈。在案例 2 和 3 上,我会保留相同的当前页面,但删除历史(允许正常的后退按钮功能在那一点上接管)。案例 1 将初始化到活动的内部起始页面(并且可以在 onCreate 的帮助下很容易地检测到)。
android - BroadcastReceiver 的 Manifest 和 Programmatic 注册的主要区别
我试图了解在 Manifest 中注册 BroadcastReceiver 和以编程方式注册之间的主要区别......
我的理解基本上如下(如果我遗漏了什么,将不胜感激有人纠正我的观点)。
在清单中注册:
- 如果需要,操作系统会神奇地找到并实例化你的类,调用 onReceive() 方法,不管你的应用程序的运行状态是什么
- 您的接收只会在每个广播中被调用一次(即您可以认为在清单中注册就像注册您的“类”以接收广播 - 并且广播会根据需要实例化您的类)(??)
以编程方式注册:
- 在代码中注册意味着您正在注册您的类的实例以接收广播消息(即,如果您的代码有点草率,并且您设法注册了多次,您最终会得到多个 BroadcastReceiver 实例,它们都调用了 onReceive()广播
- 要注销,您需要注销您之前注册的特定 BroadcastReceiver 实例
- 如果您的应用程序被操作系统破坏,您的 onReceive() 方法将不会被调用以进行广播
谢谢
android - 安卓; 如何在一个活动中初始化状态,然后再刷新一次?
我有两个活动
第一个从内容提供者那里获取一些数据,并显示它
第二个活动有一个按钮,当点击它应该调用第一个活动“刷新”,换句话说,从内容提供者重新加载数据
这是我的第一个活动
这是我的第二个活动
这是实现此类功能的正确方法吗?感觉不正确,但我无法确定任何理由来支持我的声明
android - android 奇怪的 onCreate / onDestroy 平衡
有没有办法告诉 Android 我希望对 startActivity() 的后续调用都恢复目标活动,而不是一遍又一遍地创建它?任何解决方法?
谢谢