Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:调用onPause但不在顶部的场景?_Android - Fatal编程技术网

Android:调用onPause但不在顶部的场景?

Android:调用onPause但不在顶部的场景?,android,Android,我试图理解暂停和停止之间的区别 我读过所有不同的论坛,但我仍然不清楚其中的区别。我创建了一个简单的应用程序,在调用哪个方法时尝试并测试它。为此,我简单地在每个方法中放置了记录器 从我的审判中- 弹出窗口不调用任何一种方法 切换到另一个活动会调用这两种方法 拉下通知栏都不会调用这两个方法 我只看到两个方法要么被快速连续调用,要么根本没有被调用。 我正在尝试寻找onPause被调用但onStop没有被调用的场景 目的是了解是否需要定义onPause。如果只调用onPause的场景非常罕见,那么为on

我试图理解暂停和停止之间的区别

我读过所有不同的论坛,但我仍然不清楚其中的区别。我创建了一个简单的应用程序,在调用哪个方法时尝试并测试它。为此,我简单地在每个方法中放置了记录器

从我的审判中-

  • 弹出窗口不调用任何一种方法
  • 切换到另一个活动会调用这两种方法
  • 拉下通知栏都不会调用这两个方法
  • 我只看到两个方法要么被快速连续调用,要么根本没有被调用。 我正在尝试寻找onPause被调用但onStop没有被调用的场景

    目的是了解是否需要定义onPause。如果只调用onPause的场景非常罕见,那么为onPause编写单独的代码就没有意义了。难道在上面写不就足够了吗

    public class LifecycleActivity extends ActionBarActivity {
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.d("Rachit", "In Destroy Method");
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_lifecycle);
            Log.d("Rachit", "In Create Method");
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            Log.d("Rachit", "In Start Method");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            Log.d("Rachit", "In Resume Method");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            Log.d("Rachit", "In Pause Method");
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
            Log.d("Rachit", "In Restart Method");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            Log.d("Rachit", "In Stop Method");
        }
    }
    

    在Android开发者官方页面,你可以看到与这两种活动状态相关的所有信息

    onPause()()

    当系统为您的活动调用onPause()时,它会 表示您的活动仍然部分可见,但通常是 表示用户正在退出活动,并且很快将退出 进入停止状态。通常应该使用onPause()回调函数 致:

    停止可能消耗CPU的动画或其他正在进行的操作。 提交未保存的更改,但仅当用户希望更改被保存时提交 在他们离开时永久保存(如草稿电子邮件)。释放 系统资源(如广播接收器)处理传感器 (如GPS)或任何可能影响电池寿命的资源 活动已暂停,用户不需要它们

    通常,不应使用onPause()存储用户更改(例如 将个人信息输入表格)以永久存储。这个 只有当您将用户更改持久化到 onPause()是指某些用户希望更改 自动保存(例如在起草电子邮件时)。然而,你应该避免 在onPause()期间执行CPU密集型工作,例如写入 数据库,因为它可以减缓到下一个数据库的可见转换 活动(您应该改为执行重载关机操作 在onStop()期间)

    您应该保留onPause()方法中完成的操作量 相对简单,以便快速过渡到 用户的下一个目的地(如果您的活动实际已停止)

    注意:暂停活动时,将保留活动实例 驻留在内存中,并在活动恢复时被调用。你 不需要重新初始化在以下任何过程中创建的组件: 导致恢复状态的回调方法

    onStop()()

    当您的活动收到对onStop()方法的调用时,它不是 不再可见,应该释放几乎所有不可见的资源 用户不使用时需要。一旦你的活动停止, 如果需要恢复系统,系统可能会销毁实例 记忆。在极端情况下,系统可能会简单地杀死你的应用程序 进程,而不调用活动的最终onDestroy()回调,因此 使用onStop()释放可能泄漏的资源非常重要 记忆

    虽然onPause()方法是在onStop()之前调用的,但是您应该 使用onStop()执行更大、CPU更密集的关机 操作,例如将信息写入数据库

    当活动停止时,活动对象将保持驻留状态 当活动恢复时,将调用内存和。你不需要 重新初始化在任何回调过程中创建的组件 方法导致恢复状态。该系统还保持跟踪 布局中每个视图的当前状态,因此如果 在EditText小部件中输入文本,该内容将被保留,以便 不需要保存和恢复它

    注意:即使系统在您的活动停止时销毁了它,它也会 仍然保留视图对象的状态(例如视图中的文本) EditText),并在以下情况下还原它们: 用户导航回活动的同一实例(下一个实例) 第一课详细介绍了如何使用捆绑包将其他状态数据保存到 如果您的活动被销毁并重新创建)


    当您从当前活动启动一个
    对话框activity
    时,就会出现这种情况,然后调用当前活动的
    onPause()
    ,在当前
    活动开始后调用
    onResume()


    有关更多信息,请参阅。

    我在一段时间后发现了这个问题,但忘了在这里发布我的答案

    我注意到调用onPause()而没有立即调用onStop()的实例是当我在手机上打开另一个应用程序时收到另一个应用程序的通知


    例如,假设您的手机上当前正在运行Facebook。如果您收到来自WhatsApp的通知(在弹出对话框中),您的Facebook活动将暂停。如果在此期间关闭WhatsApp弹出窗口,Facebook活动将恢复。另一方面,如果您从弹出消息中打开WhatsApp,您的Facebook活动将停止。

    当我们从当前活动启动对话活动时,只会调用
    onPause()
    。 假设我们有活动A和B。现在活动B是对话活动,活动A是正常活动。当我们从活动A启动活动B时,将调用活动A的
    onPause()
    ,并调用活动B的
    onCreate()
    onStart()
    onResume()
    。请查看下面的url以获取示例代码

    活动A-->活动
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            sendNotification();
        }
    
        private final static String TAG = "TestOne";
    
        public  void sendNotification(){
            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(this);
    
        //Create the intent that’ll fire when the user taps the notification//
    
        Intent i = new Intent(MainActivity.this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0);
    
    
        mBuilder.setContentIntent(pendingIntent);
    
        mBuilder.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder.setContentTitle("My notification");
        mBuilder.setContentText("Hello World!");
    
        NotificationManager mNotificationManager =
    
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
        mNotificationManager.notify(001, mBuilder.build());
    
    } 
    
        <activity android:name=".MainActivity"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Main2Activity"></activity>
    
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    
    <activity
        android:name=".C4_SecondActivity"
        android:label="@string/title_activity_c4__second"
        android:theme="@style/Theme.AppCompat.Dialog">
    </activity>
    
    Whenever we do Split window than onPause will be called alone 
    In Split window onStop will not be Called.