2017-01-09 241 views
0

我想手动测试我写的Android应用程序在暂停时能否正常工作。 我可以通过Android GUI执行什么操作来调用onPause()方法,而不会导致onStop()也被调用?如何手动触发我的Android onPause()方法来测试它?

我试着拉下通知栏并接到电话,但都没有导致onPause()被调用。

我想找一个非程序化的解决方案,可以通过GUI使用多个版本的Android,无论是否带电话,因为我正在教授一个充满学生使用不同设备的课程。

请注意,我不是问如何告诉如果我的onPause()方法被调用。我在问我能做什么导致它被调用,而不修改我的应用程序。

+2

您可以使用此日志。 –

+0

你可以有小吃店或吐司消息。 –

+0

@santoshkumar是的,我可以让它显示一个敬酒,但我的问题是我能做些什么,会导致onPause()方法被调用,而不是如何测试方法是否被调用。我会尽量让它更清晰。 –

回答

1

我找到了解决方案。我从书Head-First Android Development中的图片中获得了这个想法。

  1. 安装Any Do
  2. 创建一个任务。
  3. 将来设置闹钟几分钟。
  4. 启动被测试的应用程序。
  5. 当警报出现时,我的应用程序会部分模糊,并调用其onPause()方法。如果我点击关闭图标,我的应用程序将继续执行,但其方法不会被调用。

Picture showing app partly obscured by Any Do alert

0

您可以通过编程方式调用它。

或者干脆从意图开始不同的活动。

+0

谢谢,但我想这样做,而无需修改测试中的应用程序。 –

+0

如你所愿,但它应该可以帮助你测试它。如果我是你,我会在右下角添加一个按钮,通过OnClick调用demoActivity的开始。 – omriherman

0

这可以是应用程序中的一种方式。

@Override 
    protected void onPause() { 
     super.onPause(); 
     Toast.makeText(this, "Paused", Toast.LENGTH_SHORT).show(); 
     finish(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     Toast.makeText(this, "stopped", Toast.LENGTH_SHORT).show(); 
    } 

您的其他方法是使用意图打开任何活动/应用程序。

+0

谢谢,但我想知道如何导致我的onPause()方法被调用,而不是如何判断它是否被调用。 –

+0

你有Android手机中的方形按钮,一旦应用程序不可见,它将用于在后台推送应用程序,它会导致暂停状态 –

+0

你可以打开第二个活动,在这种情况下,第一个活动将进入背景,第二个活动将出现首先会打电话给我。 –

0

根据文档暂停状态的发生,如果某个活动失去了焦点但仍然可见(即新的非全尺寸或透明活动将焦点放在了活动的顶部),该活动已暂停。暂停的活动是完全活动的(它保留所有状态和成员信息并保持连接到窗口管理器),但可以在极低内存情况下被系统杀死。

因此,如果您明显参加了一个呼叫,您的呼叫屏幕将进入堆栈,并且它将调用先前正在运行的活动的onStop()。

所以,如果你只想调用onPause(),你应该打开一个新的非全尺寸或透明的活动。

+0

您可以推荐一个容易获得的非全尺寸或透明活动,并且我如何以非编程方式启动它,而无需从被测试的应用程序中导航并导致其onStop()方法被调用? –

+0

当您的当前应用程序打开时,最简单的选项将从其他应用程序获取通知。例如,假设您的手机正在运行您的手机,或者说您收到了WhatsApp通知。然后onPause()将被调用。一旦你打开通知,onStop将被调用。但只有通知,onPause()将被调用。 –

+0

谢谢。我最终做了这样的事情。 –

0

您可以创建一个警告对话框调用onPause()不调用onStop()

但重要的一点是要创建警报对话框作为一种活动。

这是可以做到如下:

创建一个名为对话框延伸AppCompatActivty新activty类,并把它添加到AndroidManifest.xml如图所示:

public class dialog extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //set appropriate layout 
     setContentView(R.layout.activity_main); 
    } 
} 

添加到AndroidManifest.xml

<application> 
.... 
    <activity 
       android:name="dialog" 
       android:theme="@style/Theme.AppCompat.Dialog"></activity> 
</application> 

将以下内容添加到MainAc的onCreate()方法中tivty.java:

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(getApplicationContext(), dialog.class); 
       startActivity(intent); 
      } 
     }); 
+0

谢谢,但我的部分目标是不必修改被测试的应用程序。 –

+0

据我所知,有两种方法可以实现这一点 - 通过创建一个警报对话框或通过在存在活动中启动一个新的透明活动,这两种方法都需要您更改代码。如果您只需按下设备上的任意硬件按钮(后退,主页或概览),它将同时调用onPause()和onStop()方法。 – sats