当我在调试器上运行我的应用程序时,我得到主线程和3个绑定线程.
在按钮上单击我调用Activity.finish(),看起来它在UI关闭时结束活动并返回到主屏幕.
但是,在调试器中,它仍然将主线程和3个绑定线程显示为" (运行) ".
我很困惑为什么会这样.更重要的是,它导致我的应用程序在退出应用程序后再次运行时调用Activity.onResume().
我当前在Activity中覆盖了这些方法,但我在每个方法中调用了相应的超级函数:
任何有关此的帮助或建议非常感谢!
我有一个HoneyComb的项目,我在主Activity中的onResum()方法上使用了recreate()方法后出错.
11-10 22:05:42.090: E/ActivityThread(1917): Performing pause of activity that is not resumed: {com.blogspot.honeyapp/com.blogspot.honeyapp.Main}
11-10 22:05:42.090: E/ActivityThread(1917): java.lang.RuntimeException: Performing pause of activity that is not resumed: {com.blogspot.honeyapp/com.blogspot.honeyapp.Main}
11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2517)
11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2505)
11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2483)
11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.access$700(ActivityThread.java:122)
11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1031)
11-10 22:05:42.090: E/ActivityThread(1917): at android.os.Handler.dispatchMessage(Handler.java:99)
11-10 22:05:42.090: E/ActivityThread(1917): at android.os.Looper.loop(Looper.java:132)
11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.main(ActivityThread.java:4123)
11-10 22:05:42.090: E/ActivityThread(1917): at java.lang.reflect.Method.invokeNative(Native Method)
11-10 22:05:42.090: E/ActivityThread(1917): at java.lang.reflect.Method.invoke(Method.java:491)
11-10 22:05:42.090: E/ActivityThread(1917): …Run Code Online (Sandbox Code Playgroud) 我正在努力了解一个活动的完整生命周期.
所以我在Google上搜索并发现了很多关于活动生命周期的教程,但在所有教程中我都没有在生命周期图中找到这些方法:
1.2 OnContentChanged()
. OnPostCreate()
3. OnPostResume()
4. OnWindowfocusChanged()
5. OnuserLeaveHint()
6. OnUserInteraction()
7.OnDetachedFromWindow()
我想知道为什么这些方法不包含在android docs的活动生命周期图中.
还有一个问题:
当第一次创建一个活动时,系统调用该OnContentChanged()方法作为第一种方法,系统最后一次调用是OnDetachedFromWindow()一个活动被杀死的方法,但是android文档说活动的整个生命周期发生在OnCreate()和之间OnDestroy()?
android activity-lifecycle android-lifecycle android-activity
我正在开发一个Android应用程序.如果我按后退按钮我的应用程序的状态应该保存.什么我应该使用保存状态..am困惑与所有这些onPause(),onResume()或onRestoresavedInstance()??? 我应该使用哪些来保存我的应用程序状态?例如,当我按退出按钮时,我的整个应用程序应退出我已使用完成()?
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
s1=(Button)findViewById(R.id.sn1);
s1.setOnClickListener(this);
LoadPreferences();
s1.setEnabled(false);
}
public void SavePreferences()
{
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("state", s1.isEnabled());
}
public void LoadPreferences()
{
System.out.println("LoadPrefe");
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
Boolean state = sharedPreferences.getBoolean("state", false);
s1.setEnabled(state);
}
@Override
public void onBackPressed()
{
System.out.println("backbutton");
SavePreferences();
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud) 我在Fragment生命周期中发现了一个非常奇怪的行为.
经过几次测试Fragment,我意识到每次都得到这个执行顺序:
我真的很惊讶因为我确信onStart只会在执行后才会被调用onCreateOptionsMenu.
仅供参考,我试图将其设置MenuItem为全局类变量onCreateOptionsMenu以便能够使用它onStart.当然,由于上面解释的执行顺序,我得到了一个空指针.
看来我越挖成片段的生命周期,更多的我失去了和文档仅详细说明的主要方法,从来没有的,如onCreateOptionsMenu,onPrepareOptionsMenu,onCreateContextMenu等.
有人有关于此的任何其他信息,文档并没有真正帮助...
谢谢
最近我遇到了一个难以重现的问题.当片段尝试使用Activity中的数据初始化ArrayAdapter时,会发生NPE.在Activity的onCreate方法中初始化的默认列表:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
mAccounts = new ArrayList<>();
// ...
}
@Override
public List<Account> getAccounts(){
return mAccounts;
}
Run Code Online (Sandbox Code Playgroud)
该片段还在其onCreate()中创建了一个列表适配器:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
//mAccountProvider is an interface implemented by the activity
mAccounts = mAccountProvider.getAccounts();
mAccountAdapter = new AccountAdapter(getActivity(), R.layout.account_list_item, mAccounts);
}
Run Code Online (Sandbox Code Playgroud)
调用默认的getCount()方法时,NPE发生在AccountAdapter内部.原因是mAccounts为空.问题很少出现,我无法重现它.
如果是有可能,片段的的onCreate()在活动的前所谓的onCreate() ?根据源代码,Fragment的onCreate()在Activity的onCreate()中调度.为什么在Activity的onCreate()完成执行后调用呢?
我的一个应用程序在某些Kitkat Samsung设备中存在严重的活动娱乐问题.拍照时问题会更频繁地出现,并且在Jellybean Samsung具有一半RAM的蹩脚中没有观察到.日志显示内存不足,但没有OutOfMemoryException抛出s.我认为有更积极的活动关闭政策Kitkat(或者默认的相机应用程序漏洞).
当我的应用程序的内存很高时,我想知道操作系统是否会关闭我的活动,或者当所有应用程序使用的总内存很高时,它会关闭它们.如果操作系统具有每个进程阈值,那么可能在不同的进程中打开相机可能会有所帮助.
我知道可以使用process清单中的属性在自己的进程中启动服务.假设不存在等效属性Activities,如果我在自己的进程中启动了代理服务,然后从该服务启动了一个活动,那么活动是否也会在此过程中运行?
我有一个正在研究的应用程序,它正在使用生命周期库,但我得到一个IllegalArgumentException,上面写着"无法添加具有不同生命周期的相同观察者"我只在onCreate中添加了观察者,我认为这是安全的.我的大多数观察者都是通过匿名类添加的,我认为这不是问题所在,因为观察者永远不会被回收.一个是使用this:
private GpsState gpsState;
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLifecycle().addObserver(gpsState);
gpsState.observe(this, (state) -> {
// ...
});
}
Run Code Online (Sandbox Code Playgroud)
在该示例中,GpsState扩展LiveData以提供GPS的当前状态并且实现LifecycleObserver为能够在达到ON_RESUME状态时刷新某些值.
知道我可能做错了什么吗?
I am using a FragmentActivity and sometimes on Crashlytics, I am able to see an exception Fatal Exception: java.lang.RuntimeException: Unable to pause activity
Below is the onPause of my FragmentActivity
@Override
protected void onPause() {
super.onPause();
if (EventBus.getDefault().isRegistered(this))
EventBus.getDefault().unregister(this);
}
Run Code Online (Sandbox Code Playgroud)
Here is the stack trace of this crash.
Fatal Exception: java.lang.RuntimeException: Unable to pause activity {com.avail.easyloans.android/com.avail.easyloans.feature.marketplace.activities.ActivityMarketplace}: java.lang.IllegalStateException: Restarter must be created only during owner's initialization stage
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3471)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3430)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3402)
at android.app.ActivityThread.access$1300(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1416)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157) …Run Code Online (Sandbox Code Playgroud) android android-lifecycle illegalstateexception onpause android-fragmentactivity
场景1-如果我们ViewModels用来在片段之间进行通信,则ViewModel必须通过活动引用来创建,因此必须将其保留在内存中,直到活动被销毁为止。
方案2-在主从流程ViewModel中使我们的生活更轻松,但内存使用问题仍然存在。
场景3- viewModelScope在新版本的Arch库中,我们将取消具有Fragment / Activity生命周期的作业,但是如果ViewModel使用活动引用创建了作业,则它将停留在那里直到活动被销毁为止。因此,该作业仍可以执行并且片段已经消失。
android bundles android-lifecycle android-fragments android-viewmodel