Articles of android lifecycle

测量片段中的视图

我需要知道ImageView的宽度和高度。 有没有办法在片段中测量它? 在标准Activity中我使用: @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); image.getWidth(); image.getHeight(); } 但我在哪里可以使用image.getWidth(); 和image.getHeight(); 片段?

什么时候片段的onActivityResult被称为片段生命周期?

当我启动Camera intent时,我注意到onActivityResult在fragment生命周期中的onResume之前被调用。 我还注意到在onStart之后onStart onActivityResult 。 但这是奇怪的部分:我有variablesfileUri ==“一些图像路径”。 这个variables是 onStart中的NOT NULL。 onActivityResult中为NULL 在onResume中再次为NOT NULL 看logCat 12-03 14:39:42.418: D/Fragment1(29220): onStart fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg 12-03 14:39:42.463: W/PhoneWindow(29220): Previously focused view reported id 2131034140 during save, but can’t be found during restore. 12-03 14:39:42.463: D/Fragment1(29220): onActivityResult fileUri is NULL!!! 12-03 14:39:42.468: D/Fragment1(29220): onResume fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg 最糟糕的是,这只发生在50%的时间。 另外50%的onActivityResult可以毫无问题地访问fileUri值… 我该怎么调试这个? 注意:为简单起见,我没有包含onResume,onStart,onActivityResult方法的代码。 它们只是具有variables检查和日志调用的基本方法。 […]

最小的Android前台服务在高端手机上被杀死

我正在尝试创建一个允许用户记录路线(位置/ GPS)的应用程序。 为了确保即使屏幕关闭也记录了位置,我已经为位置记录创建了foreground service 。 我将位置存储在Room Database ,该Room Database使用Dagger2注入我的服务。 但是,这项服务被Android杀死,当然这并不好。 我可以订阅低内存警告,但这并没有解决我的服务在运行Android 8.0的现代高端手机上大约30分钟后被杀的根本问题 我创建了一个只有“Hello world”活动和服务的最小项目: https : //github.com/RandomStuffAndCode/AndroidForegroundService 该服务在我的Application类中启动,并且路由日志记录通过Binder启动: // Application @Override public void onCreate() { super.onCreate(); mComponent = DaggerAppComponent.builder() .appModule(new AppModule(this)) .build(); Intent startBackgroundIntent = new Intent(); startBackgroundIntent.setClass(this, LocationService.class); startService(startBackgroundIntent); } // Binding activity bindService(new Intent(this, LocationService.class), mConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT); // mConnection starts the […]

DialogFrag#show()来自片段抛出“IllegalStateException:onSaveInstanceState后无法执行此操作”

为了清楚起见,我已经阅读了关于“IllegalStateException:在onSaveInstanceState之后无法执行此操作”的十几个SO问题,我已经阅读了Alex Lockwood的博客文章http://www.androiddesignpatterns.com/2013/08/片段事务提交状态-loss.html 所以我不是盲目地问这个。 我有一个非常简单的用例案例, 不涉及AsyncTask或任何后台处理。 我有一个包含按钮的片段。 在按钮的onClickListener上,我创建了一个DialogFragment并显示它。 public final class OverviewFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.overview_fragment, container, false); startNewGameButton = (Button) view.findViewById(R.id.buttonNewGame); startNewGameButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final NewGameFragment dialogFrag = NewGameFragment.create(getApplication()); dialogFrag.show(getFragmentManager(), NewGameFragment.FRAGMENT_TAG); } }); } [NewGameFragment] […]

活动生命周期随API 25(7.1.1)而变化

在我的MainActivity中,如果设置了intent中的标志,我会打开一个对话框。 如果对话框已创建,则在onPause()中将其解除 @Override public void onPause() { super.onPause(); if (_dialog!= null) { _dialog.dismiss(); _dialog= null; } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intentContainsFlag) { _dialog = ….; _dialog.show(); } } 如果按下ListView持有者按钮并构建意图URI,则打开该对话框: bttn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // The URL scheme is registered in the intent filter String intentString […]

什么是Activity.isFinishing()的片段等价物?

在我的活动中,我经常使用这个成语: @Override public void onDestroy() { super.onDestroy(); if (isFinishing() != true) return; // do some final cleanup since we’re going away for good } Fragment有一个onDestroy()方法,但是isFinishing()的等价物是什么? 我应该从片段的onDestroy()检查getActivity().isFinishing() onDestroy()吗? 编辑添加: 以下是我在各种情况下得到的回调(按顺序),以及getActivity()返回null还是非null,如果非null,则返回getActivity().isFinishing() : 场景#1: DialogFragment正在显示,用户点击后退按钮(即需要发布引用): onDismiss(): activity = non-null, finishing = false onDestroy(): activity = non-null, finishing = false 场景#2:显示DialogFragment并完成父活动(即需要发布引用): onDestroy(): activity = non-null, finishing = true onDismiss(): […]

活动生命周期X电源按钮X锁定屏幕

当我按下电源键时,屏幕关闭(完全黑暗),系统会破坏我的活动,然后重新创建它: 03-28 22:48:00.934: V/[BB](5809): [GameControl] onPause 03-28 22:48:01.444: V/[BB](5809): [GameControl] onDestroy 03-28 22:48:01.724: V/[BB](5809): [GameControl] onCreate 03-28 22:48:03.016: V/[BB](5809): [GameControl] onResume 03-28 22:48:03.016: V/[BB](5809): [GameControl] onPause 这是因为我的活动具有固定方向(横向)并且锁定屏幕是纵向。 我通过设置固定的纵向方向测试了这个理论,但问题没有发生。 我还检查了getResources()。getConfiguration()值: { scale=1.0 imsi=724/31 loc=pt_BR touch=3 keys=2/1/1 nav=1/1 orien=2 layout=17 uiMode=17 seq=36} { scale=1.0 imsi=724/31 loc=pt_BR touch=3 keys=2/1/1 nav=1/1 orien=1 layout=17 uiMode=17 seq=37} { scale=1.0 imsi=724/31 loc=pt_BR […]

活动生命周期方法:onPostResume意义

有关活动的官方文档列出了7种生命周期方法。 onPostResume()未被引用为生命周期方法。 但我觉得这种方法很重要。 在生命周期中,当一个活动从隐藏到显示状态可见时, onRestart() onStart() onResume() onPostResume() 已被按顺序调用。 我的代码片段: package ravindra.projects.my_app_1; import android.content.Intent; import android.content.IntentFilter; import android.os.PersistableBundle; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private EditText txtUserName; private EditText txtPassword; Button loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); […]

android:何时使用onStart(),onStop()?

我读过几篇描述onStart()和onResume()之间区别的post:当活动变得可见时调用onStart() ,当活动准备好与用户交互时调用onResume() 。 精细。 我总是把代码添加到onPause()和onResume() ,并且从不打扰onStart()和onStop() 。 任何人都可以举一些具体的例子说明你可以在onStart()和onResume()做些什么吗? onStop()和onPause() , onStop()有用吗? 我必须在这里遗漏一些基本的东西。

Android – 在进行父活动时保留以前添加的意图

目前我正在使用Android ,我仍然有一些理解Activity生命周期的麻烦。 让我用一个例子告诉你我的问题: 我的应用程序包含一个Navigation Drawer ,允许用于在不同的Fragment之间切换。 一个片段(片段A)是包含一些项目的列表。 单击一个项目将打开活动B,可以将其描述为项目的详细视图。 B通过Intent接收所有必要的信息,项目模型实现Parcelable,并将其作为Intent的Extra。 活动B的button打开地图视图活动C. A – (项目) – > B – > C. 当B Activity onCreate方法调用时,使用C操作栏中的向上按钮会使应用程序崩溃 Item item = bundle.getParcelable(“com.example.myapp.model.Item”); 当然,因为详细视图B获得了必须从A显示的所有必要信息。我该如何解决这个问题? 我希望能够以某种方式存储该项目,同时调用C并再次上升到B. (使用C上的后退按钮工作正常)