我有一个非常无聊的问题.当我的应用程序转到后台时,有时会在LogCat显示时终止该进程:
INFO/ActivityManager(187): Low Memory: No more background processes.
INFO/ActivityManager(187): Process com.app.myapp (pid 20681) has died.
INFO/WindowManager(187): WIN DEATH: Window{40592708 com.app.myapp/app.myapp.dashboard.Dashboard paused=false}
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Consumer closed input channel or an error occurred. events=0x8
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Channel is unrecoverably broken and will be disposed!
INFO/WindowManager(187): WIN DEATH: Window{408b1d40 app.myapp/app.myapp.menus.products.Promotions paused=false}
INFO/ActivityManager(187): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=app.myapp/.Main } from pid 187
INFO/ActivityManager(187): Start proc app.myapp for activity app.myapp/.menus.products.Promotions: pid=20721 uid=10062 gids={3003, 1015}
Run Code Online (Sandbox Code Playgroud)
当我尝试返回应用程序时,通过任务切换器(长按回家),它会尝试返回上次打开的活动...并崩溃. …
我正在开发一个应用程序,在我的一个活动中,我显示了一个progressdialog.我已经管理它以便在旋转期间正确显示,我认为这也可以处理电话的情况,但是当我通过电话测试时,对话框消失了.那么电话究竟对应用程序做了什么以及如何成为应用程序生命周期的一部分?
我想保存我的应用程序的状态,以便在从关闭状态重新打开时,最后一个片段是可见的并且后备堆栈被保留.我希望每次关闭应用程序时都保留此状态,而不仅仅是方向更改或系统杀死应用程序以释放资源(就像使用onSaveInstanceState()/ 时的情况一样)onRestoreInstanceState().
到目前为止,我已经能够通过将状态保存到SharedPreferences并在以后恢复它来按计划恢复上一个片段及其状态.但是,这不会保留片段后备栈,因此当用户加载应用程序并按下后退按钮以在应用程序流中"向上"移动时,应用程序退出而不是上升.
此时我需要的是能够访问应用程序后台堆栈并在必要时将其保存到捆绑包中,就像系统所做的那样onSaveInstanceState().我已经阅读了文档,FragmentManager.saveFragmentInstanceState()但我不知道如何使用它来实现我的目标.任何人都能指出我正确的方向吗?
我正在使用Android兼容性库中的片段实现.
在覆盖活动的ondestroy时,我应该在super.onDestroy()之前或之后放置命令吗?
protected void onDestroy() {
//option 1: callback before or ...
super.onDestroy();
//option 2: callback after super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
(现在我担心:如果super.onDestroy太快,它将永远不会到达选项2.)
在Android文档中,我单独找到了Activity生命周期和Fragment生命周期的规范,但从未在一起.这似乎并不明显,因为我将调试器连接到FragmentActivity我的片段主机,生命周期不仅仅是疯狂.看起来活动首先完成然后片段开始,这是不可能的.
Fragment的生命周期

活动的生命周期

从逻辑上讲,片段应该"跳入"活动的生命周期onResume,它将在活动之前结束onPause,但似乎没有发生.
有人可以向我展示与其父级活动相关的片段的生命周期,还是指导我一些关于此的好教程?
android android-lifecycle android-fragments android-fragmentactivity
我是一个Android初学者,不幸的是我到目前为止找不到令人满意的答案.我希望你能帮助我.我认为我的问题涉及一项共同的任务.
我的情况如下:我已经实现了自己的服务,只记录GPS位置并将它们存储在列表中.服务停止后,它会将数据写入数据库.
这很好用,但现在服务应该有某种" 暂停模式 ",它停止录制,以后可以恢复.实现此功能的最佳方法是什么?
到目前为止,我想出了两个(当然不是很令人满意)的想法:
实现我自己的服务生命周期(启动,停止,暂停,恢复)并将GUI绑定到服务.此外,似乎异步发生绑定,这使得更新GUI(启用和禁用启动/停止控件)有点混乱.
暂停时,服务停止,GPS位置被附加到单个类中的某个列表中.在恢复时,服务再次启动,依此类推.我在这里看到的问题是,在暂停模式下应用程序可能会被杀死并且数据丢失.
Android提供了Service类,它可用于后台或非UI操作.
我对服务的生命周期有疑问.
我知道绑定服务的生命周期如下:
我的问题是:
活动通常在onStop()上调用unbindService().但是,可以在不调用onStop()的情况下杀死Activity - 我的意思是,当系统内存不足时,必须调用的唯一方法是onPause().onStop()在onPause()之后.在调用onStop()之前,可以销毁Activity.
在这种情况下,服务没有获取unbindService(),因此服务仍在运行.这是正确的吗?
当然,这很少发生,因为默认情况下服务是后台.(服务更有可能被内存不足的系统杀死.)但是,"Foreground"服务的优先级高于"onPause()ed活动".根据http://developer.android.com/guide/components/processes-and-threads.html.在这种情况下,绑定活动将首先被杀死.
如果发生这种情况,服务不会结束?如果内存不再低,则将再次创建Activity,但会再次调用bindService(),因为它是一个新实例.此外,活动甚至可能无法重新启动.这不对吗?在这种情况下我该怎么办?
注意:即使系统在停止时破坏了您的活动,它仍然保留状态
Bundle中的View对象(例如EditText中的文本)(一对键值对),如果用户导航回活动的同一个实例,则恢复它们 (下一课讲述有关使用Bundle的更多信息)保存其他状态数据,以防您的活动被销毁和重新创建).
同一个活动的实例
它是如何被破坏和重新创建的确切实例,它不是一个新的内存块(另一个实例),任何人都可以帮我清除这一点吗?
我已经实现了播放器,现在出现了问题.当视频正在播放并且应用关闭并恢复时,视频屏幕会冻结.我甚至看到了Google的ExoPlayer演示活动以便更好地理解,但我无法通过它在我的应用程序中实现它.我已在此处附加了Player活动,并且对于完整代码,我正在共享GitHub存储库以获取所使用的完整文件集.
RecipeStepDetailFragment.java
package com.example.android.recipe.ui;
import android.content.Context;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.example.android.recipe.R;
import com.example.android.recipe.pojo.Recipe;
import com.example.android.recipe.pojo.Step;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import java.util.ArrayList;
import java.util.List;
import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveVideoTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.upstream.BandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.Util;
import com.squareup.picasso.Picasso;
import static …Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments android-studio exoplayer
我无法辨别LifeCycleRegistry实例方法之间的区别,handleLifecycleEvent并且markState.根据文档handleLifecycleEvent设置当前状态并通知观察者.markState另一方面,将生命周期移动到给定状态,并将必要的事件发送给观察者.
因此,在两种方法中都会更改状态并通知观察者,以便他们可以触发相应的回调(基于我当前的理解).是否存在这两种方法不一样的情况?