可以理解这个问题有点主观,但我相信有一个具体的答案.
我有一个非常小的活动,只是在ListActivity中向用户显示一些数据.我使用的数据来自应用程序的SQLite数据库,我发现自己这样做了
Run Code Online (Sandbox Code Playgroud)public class MainActivity extends ListActivity{ private DatabaseAdapter dbHelper; @Override public void onCreate(Bundle b){ dbHelper = new DatabaseAdapter(this); super.onCreate(b); } @Override public void onResume(){ dbHelper.open(); fill_data();//a small method that uses dbHelper to setListAdapter super.onResume(); } @Override public void onPause(){ dbHelper.close(); super.onPause(); } private void fill_data(){/*makes use of dbHelper */ }
这只是代码很大程度上不必要吗 我想处理生命周期,因此当MainActivity不在最佳状态时,我可以使用最少量的资源,但与此同时,整个活动可以完成onCreate().
在我的Android应用程序中,为了询问用户他/她是否想要恢复当前游戏,我在主游戏活动中显示一个对话框,说"你想恢复当前游戏吗?是 - 否".
问题是,如果我在没有回答对话的情况下不同时间恢复此活动,那么我会得到几个对话框,这显然不是我的目标.
我可以使用布尔var轻松避免这种行为,但我想知道Dialog类是否有一种防止重复或类似的选项.
我有一个带有edittexts的表单和一个用于调用相机的按钮(返回一个放入imageview的位图)...从纵向模式我输入所有的edittext字段,然后单击相机按钮将我转发到相机 - 在相机中我拍照后我将返回到活动1(保持纵向 - 并且所有editext字段都恢复onRestoreInstanceState()) - 并且活动1的最后一个回调方法是onResume()(什么是好的) - 但是问题当我从这个肖像到横向模式进行方向更改时 - 回调方法如下

所以最后的回调方向改变是onPause().我不懂为什么?问题是onSaveInstanceState在onPause之前调用 - 所以当我回到纵向模式时,所有内容都将为空(editexts,imageview ..) - 这种奇怪的行为会在每次方向更改时继续(最后调用onPause()).
我确定这个问题必须与拍摄图像(startInentforResult ....)有关,因为所有(editext字段)在拍摄图像之前在方向更改上工作正常...有时我也可以拍摄图像并且它可以正常工作很好,但在大多数情况下不...
所以我的问题是什么是"驱动"我的活动直到onPause()方法而不是onResume()?
谢谢,我真的很感激,如果有人知道解决方案,因为我已经困难了几天,无法找到解决方案.
该项目有很多类,但这是活动代码(需要注意的是,只有当我从相机应用程序中获取图像时才会出现问题,之后活动生命周期变得疯狂 - 此活动也是通过'startIntentforResult从主活动中调用的()'.我不使用'android:configChanges ="orientation | keyboardHidden"'来停止recreatioin):
public class NewCounterActivity extends Activity {
Button btnCreate;
Button btnCancel;
Button btnTakeImg;
ImageView counterImgView;
CheckBox existsDamage;
EditText inputNameFirst;
EditText inputNameLast;
EditText inputAdresse;
EditText inputCounterID;
EditText inputCounterValue;
EditText inputDescription;
TextView registerErrorMsg;
DatabaseHandler db;
//Data to be submitted
String nameFirst;
String nameLast;
String adresse;
String …Run Code Online (Sandbox Code Playgroud) 我想在我的另一个开始我MainActivity的新.这两个活动位于同一个应用程序中,第二个活动实际上是从MainActivity启动的.所以场景是这样的:IntentActivity
MainActivity未标记.我的意思是,清单中的Activity的启动模式没有设置(所以,它是默认的).
我想知道MainActivity的生命周期和意图会发生什么.
活动是否重新创建?被onCreate()称为?然后onCreate()被叫两次,没有onDestory()?或者新创建了MainActivity,并且会有两个MainActivities?意图会被getIntent()覆盖吗?
我知道Activity.onNewIntent()被称为singleTop活动.然后在我的情况下onNewIntent()没有被称为?
提前致谢.
我有一个活动,显示通知栏上的通知.如果用户按下主页按钮进入后台,我会保留通知(这就是我需要的),但是当用户关闭应用程序时,我需要取消通知,这就是我的问题.
我怎么能处理这个?每当用户进入后台然后关闭应用程序时,我需要从通知栏中删除通知,但如果用户将应用程序保留在后台,我需要通知.
当我的应用程序启动时,启动器活动的onCreate()方法通常只被调用一次.但紧接着是对onResume()的两次调用.当我检查代码时,两个实例都属于同一个类,但是只有一个实例具有来自onCreate()的实例成员.
但是,一切都很好.我只是好奇地试图理解为什么会这样.有人有什么想法吗?我正在使用SherlockFragmentActivity,这与它有什么关系吗?我很乐意根据需要提供更多信息.我现在还不知道还有什么相关的.
谢谢!
我试图了解android活动的生命周期.
官方文件说明:
暂停您的活动:
当系统为您的活动调用onPause()时,从技术上讲,这意味着您的活动仍然是部分可见的.
我创建了一个活动,然后使用intent移动到另一个活动.在调试时我看到第一个活动的onPause()确实被调用.但是我不明白活动部分可见是什么意思,因为当其他活动可见时(并且第一个活动暂停)然后第一个活动根本不可见.
带着敬意
马尼什
我知道a Bundle可用于在活动之间传递数据,以及在屏幕轮换等配置更改的情况下保存和恢复数据.
我还读到这SharedPreferences是存储持久数据的首选方式,而不是Bundle.
为什么会这样呢?为了Bundle处理配置更改,即使在销毁活动之后也必须保持这种状态.那究竟什么是寿命Bundle呢?是否存在通过垃圾收集任意消除的某一点,或者Bundle只要您不手动选择清除它,数据是否会持续存在?
android bundle sharedpreferences android-lifecycle android-activity
我有一个Xamarin Forms应用程序,目前正在为Android构建.我有一个MainActivity用于扩展的东西FormsApplicationActivity,但因为我想使用自定义主题我必须将其更改为扩展FormsAppCompatActivity(请参阅我的另一个问题:Xamarin Forms自定义主题不起作用).
每当我切换到应用程序然后回到应用程序时,从更改FormsApplicationActivity到FormsAppCompatActivity应用程序崩溃.它App.xaml.cs在OnResume方法中的类中抛出一个错误,我尝试将MainPage设置为一个新的导航页面:
protected override void OnResume()
{
bool isRegistered = _authenticationService.IsRegistered();
MainPage = isRegistered
? new NavigationPage(new LoginPage())
: new NavigationPage(new RegisterPage()); // this results in the crash
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Java.Lang.IllegalStateException:无法在onSaveInstanceState之后执行此操作
这是堆栈跟踪:
03-09 13:43:52.098 I/MonoDroid( 1243): Java.Lang.IllegalStateException: Can not perform this action after onSaveInstanceState
03-09 13:43:52.098 I/MonoDroid( 1243): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/2098/3efa14c4/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143
03-09 13:43:52.098 I/MonoDroid( 1243): at Android.Runtime.JNIEnv.CallIntMethod (IntPtr jobject, …Run Code Online (Sandbox Code Playgroud) android android-lifecycle xamarin xamarin.forms xamarin-forms
我刚刚将Firebase添加到我的应用程序中,并想要使用Crash控制服务和Google Analytics.一切都很好,直到我从主页按钮关闭我的应用程序,然后我再次访问它.在那之后,我的应用程序完全冻结,任何响应,任何错误,我可以从我的logcat获得的唯一日志是:
01-01 15:55:40.600 1236 1262 W BroadcastQueue: Timeout of broadcast BroadcastRecord{fb70722 u0 com.google.firebase.INSTANCE_ID_EVENT} - receiver=android.os.BinderProxy@b6695b3, started 60009ms ago
01-01 15:55:40.600 1236 1262 W BroadcastQueue: Receiver during timeout: ResolveInfo{7bc7770 com.bq.camerabq/com.google.firebase.iid.FirebaseInstanceIdInternalReceiver m=0x0}
01-01 15:55:40.647 1236 1262 I ActivityManager: Skipping duplicate ANR: ProcessRecord{ce79b34 8173:com.bq.camerabq/u0a96} Broadcast of Intent { act=com.google.firebase.INSTANCE_ID_EVENT flg=0x14 cmp=com.bq.camerabq/com.google.firebase.iid.FirebaseInstanceIdInternalReceiver (has extras) }
Run Code Online (Sandbox Code Playgroud)
我第一次启动应用程序时也出现此错误,但我在此帖中看到它总是发生,是Firebase常见错误(无法读取模块... Firebase):
01-01 16:18:33.155 2149 2149 D FirebaseApp: Initialized class com.google.firebase.auth.FirebaseAuth.
01-01 16:18:33.163 2149 2149 D FirebaseApp: Initialized class com.google.firebase.iid.FirebaseInstanceId.
01-01 16:18:33.167 2149 2186 E DynamiteModule: …Run Code Online (Sandbox Code Playgroud) android crash-reports android-lifecycle firebase android-gradle-plugin