标签: activity-lifecycle

当睡眠在我的视图中启动但不是从主屏幕启动时,为什么我的 android 应用调用 onCreate()?

我的应用程序似乎表现得很完美,但我不明白一件事。当我按下主页按钮并返回到我的应用程序时,之前的状态会(自动)恢复。当我按下主页按钮然后手机在主屏幕(或除我自己的任何其他视图之外的任何其他视图)中进入睡眠状态并返回到我的应用程序时,之前的状态将(自动)恢复。

现在,关键是当手机在我的 Activity 处于睡眠状态时,它不会自动恢复以前的状态,但似乎会调用 onCreate() 因为开始初始化发生并且我的应用程序的行为就像它刚刚启动一样。

我能够保存实例并使用 saveInstanceState() 调用存储的状态,所以最终问题是可以解决的,但我的问题是:如果 Android 从我的活动中进入睡眠状态,而不是从另一个活动中进入睡眠状态,为什么它会调用 onCreate()?如果它不调用 onCreate() 发生了什么,为什么我必须打扰 saveInstanceState() 因为在每个实例中(除非内存不足)我的应用程序将用户返回到他们的最后一个“地标”,除非手机进入睡眠状态从我的活动。

android sleep activity-lifecycle android-activity

3
推荐指数
1
解决办法
2748
查看次数

将应用程序带到后台然后到前台

我应该使用什么方法将我的应用程序移动到背景,然后再将其移动到前台?我尝试使用moveTaskToBack(true)并将活动成功移动到后台,但后来我无法将其移动到前台.我尝试使用startActivity()再次启动活动,但没有成功,似乎没有方法moveTaskToFront()或类似的东西.

android activity-lifecycle android-activity

3
推荐指数
1
解决办法
2942
查看次数

对Android Activity生命周期的困惑

我有一个应用程序是一个活动.

一切都按照我的预期工作,除非我把电话(三星Galaxy Ace运行姜饼)用侧面的按钮睡觉.当我这样做时,会调用以下内容(按此顺序):

onPause,onStop,onDestroy,onCreate,onStart,onResume,onPause.

这是没有唤醒手机,它仍然睡着了 - 屏幕关闭.

为什么活动被完全杀死并重新创建?

更奇怪的是,如果手机再切换回来,则会发生以下情况:

onResume,onPause,onStop,onDestroyed,onCreate,onStart,onResume

即使它已经"准备好了"(坐在onPause中),它也会被杀死并重新创建.

如果应用程序正在运行并按下Home,则活动仅停止,而不是被杀死,一旦停止,我可以将手机置于睡眠状态,然后再将其唤醒,活动永远不会被杀死.它只是去onRestart等......这是我所期待的.

仅当手机在活动运行时(并在前台)进入睡眠状态时,才会出现此问题.

我已经阅读了有关活动生命周期的文档,但我无法弄清楚为什么会出现这种情况.

android sleep activity-lifecycle android-activity

3
推荐指数
1
解决办法
754
查看次数

如何在android活动中以编程方式触发onPause

我试图找出如何模拟暂停活动来调试我的应用程序.我希望onPause被调用但不是onStop.我只是想尝试一个暂停恢复周期,我正在寻找一些我可以调用的代码(例如按下按钮后)来触发这个.

有什么想法?

我看到人们建议在其他线程中按下主页按钮,但是当我这样做时,停止应用程序并调用onStop以及onPause,因此它不是我想要的.

android activity-lifecycle

3
推荐指数
1
解决办法
8487
查看次数

如果 App 进程被杀死,bundle 如何发送到 onCreate?

在活动生命周期图中,有一个从“onStop”到“应用程序进程已终止”到“onCreate”的箭头。一直想知道,现在我要对片段做一个小讨论;如果整个应用程序进程被销毁,onCreate 如何从 onStop 接收包?系统是否会跟踪被杀死的应用程序及其活动包?我认为这就是它的方式,因为那时被终止的应用程序将分配给它的内存为零。

此外,从页面管理活动生命周期>启动活动的最后一段,“系统在所有情况下调用 onPause() 和 onStop() 之后调用 onDestroy(),除了一种情况:...'情况并未说明为内存不足。这让我认为箭头不应该从 onStop 转到 onCreate 因为“具有更高优先级的应用程序需要内存”。这是一个错字还是我读错了?我想我'因为'Killable'而读错了吗?'一般而言,活动生命周期的运动如下所示:'图表。

其中之一必须是活动生命周期图表中的箭头或“系统在它已经调用 onPause() 和 onStop() 之后调用 onDestroy() 之后在所有情况下除了一种:...”语句错误。希望我是在断章取意的情况下阅读的。

android activity-lifecycle

3
推荐指数
1
解决办法
965
查看次数

Android Studio:上一个 Activity 的后退按钮

Activity用a 创建了Navigation Drawer,并用 a 替换了选项图标(位于右上角)以ImageButton处理后退单击。

问题是,我不知道该怎么做。我对如何使用后退按钮有点困惑。我应该使用什么代码才能转到上一个Activity

后退按钮用于:Activity 到另一个 Activity 以及 MainActivity 到 Fragment 活动。

这是我的清单代码:

   <activity
        android:name="com.teamamazing.with_sidebar.activity.Accomodation"
        android:label="Accomodation"
        android:parentActivityName="com.teamamazing.with_sidebar.activity.SpecialPage">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.teamamazing.with_sidebar.activity.SpecialPage" />
    </activity>
Run Code Online (Sandbox Code Playgroud)

这是我的住宿活动:

package com.teamamazing.with_sidebar.activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.teamamazing.with_sidebar.R;


public class Accomodation extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_accomodation);
  } }
Run Code Online (Sandbox Code Playgroud)

这是我的SpecialPage 代码:它将成为父活动。

package com.teamamazing.with_sidebar.activity;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import com.teamamazing.with_sidebar.R;


public class SpecialPage …
Run Code Online (Sandbox Code Playgroud)

android android-intent activity-lifecycle android-fragments android-activity

3
推荐指数
1
解决办法
3万
查看次数

使用完成按钮单击关闭 android 活动(完全,甚至不在后台)

单击按钮时,我需要关闭活动。不幸的是,当单击按钮时,活动确实消失了,但仍在后台。用户仍然可以选择它并返回到前面。我需要的是完全消失/破坏的活动。

public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            Button button = (Button)findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在相关问题上搜索了 SO,但是,它们都没有帮助完全关闭活动。我已经尝试添加返回,添加另一个广播侦听器并传递命令以在 onCreate 之外调用完成。所以在这一点上,问题是 - 这真的可能还是 Android 是这样工作的,您可以调用 finish() 但它仍然在后台,用户可以重新启动它。

这是xml文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app1.test.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

编辑:添加 android:excludeFromRecents="true" 并不能解决问题。以下是重新创建此问题的步骤,如果有人认为它是重复的或已解决,请尝试发表评论/答案,我会接受。 …

android android-layout activity-lifecycle activity-finish android-activity

3
推荐指数
1
解决办法
6734
查看次数

如何覆盖Android应用程序中的配置?

已解决(底部的解决方案)

在我的活动中,我需要阅读首选项,然后覆盖配置。在构造函数中 Context 还没有准备好:

尝试在空对象引用上调用虚拟方法“java.lang.String android.content.Context.getPackageName()”

onCreate为时已晚:

java.lang.IllegalStateException: getResources() 已经被调用

ContextThemeWrapper文档

[ applyOverrideConfiguration ] 方法只能调用一次,并且必须在调用 getResources() 或 getAssets() 之前调用。

什么是覆盖配置的正确时间和地点?

下面是我当前工作解决方案的代码摘录。

class OverrideActivity extends AppCompatActivity {

    // ...

    private boolean __overrideConf = false;

    @Override
    public Resources getResources() {
        if (!__overrideConf) {
            // ...
            // read shared preferences needs context
            // ...
            applyOverrideConfiguration(configuration);
            __overrideConf = true;
        }
        return super.getResources();
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案(覆盖受保护的方法attachBaseContext

@Override
protected void attachBaseContext(Context newBase) …
Run Code Online (Sandbox Code Playgroud)

android android-preferences activity-lifecycle android-activity

3
推荐指数
1
解决办法
3758
查看次数

Android片段事件监听器

据我了解,在片段onCreate中创建片段事件侦听器会不会更好?如果在onCreateView中完成,则每次片段返回视图时都必须重做(onResume())?在它设定的地方会有所作为吗?

android listener fragment activity-lifecycle

2
推荐指数
1
解决办法
2万
查看次数

启动另一个全屏活动时未调用Activity的onStop()

我曾经认为,当活动A被另一个全屏活动B替换时,onStop()将调用A的回调.

这也反映在文档中:

活动的可见生命周期发生在对onStart()的调用和对onStop()的调用之间.在此期间,用户可以在屏幕上看到活动并与之交互.例如,当一个新活动开始并且这个活动不再可见时,会调用onStop().

在此输入图像描述

然而,现在,我正在观察不同的行为(在Lollipop和Marshmallow上测试).

我开始AuthenticationActivityHomeActivity和,尽管事实AuthenticationActivity是一个全屏幕活动,HomeActivity不停止.

在清单中声明这些活动:

    <activity
        android:name=".screens.home.activities.HomeActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity
        android:name=".screens.authentication.activities.AuthenticationActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:windowSoftInputMode="adjustResize"
        android:theme="@style/AppTheme.Transparent"/>
Run Code Online (Sandbox Code Playgroud)

当活动切换时,这是我在logcat中观察到的:

11-28 10:16:31.443 15183-15183/somepackage I/LOG:: LifeCycle : activity (somepackage.screens.home.activities.HomeActivity@3561e8e1) paused
11-28 10:16:31.583 15183-15183/somepackage I/LOG:: LifeCycle : activity (somepackage.screens.authentication.activities.AuthenticationActivity@2bbdb20f) created
11-28 10:16:31.753 15183-15183/somepackage D/Activity: performCreate Call secproduct feature valuefalse
11-28 10:16:31.753 15183-15183/somepackage D/Activity: performCreate Call debug elastic valuetrue
11-28 10:16:31.753 15183-15183/somepackage D/AuthenticationActivity: onStart()
11-28 10:16:31.753 15183-15183/somepackage I/LOG:: LifeCycle : …
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-activity

2
推荐指数
1
解决办法
1627
查看次数