首页 > 编程知识 正文

android,ios为什么比安卓流畅

时间:2023-05-04 01:20:04 阅读:165424 作者:2836

前言

现在面试测试岗位,要求全能。 web、界面、APP什么都要测量。 那么,测试APP一般需要什么技能?

面试APP的测试部门会被问什么问题? 如何让面试管理员看起来熟悉APP测试?

本文总结了APP测试面试中常见的10个问题

什么是活动?

2.Activity生命周期?

3 .安卓四大组件?

4.app测试和web测试有什么区别?

5 .安卓和ios测试有什么区别?

6.APP出现ANR是什么原因?

7.App中出现crash的原因是什么?

8.app不稳定,偶然出现anr和crash时,是如何应对的?

9 .怎么做APP日志?

10 .你平时看日志吗? 一般会发生什么样的异常(Exception )?

何谓activity

官方是activity APP应用程序的组件,提供与用户交互、打电话、发送邮件和查看地图的屏幕。

Activity是Android的APP应用程序组件,提供屏幕之间的交互。 每个Activity都提供了一个用于呈现用户界面的窗口。 窗口可以满了。 它可以小于屏幕,也可以漂浮在其他窗口上。

一个APP应用程序通常由多个松散连接的Activity组成,通常APP应用程序中的一个Activity指定主要活动,即第一次启动APP应用程序时呈现给用户的Activity。 如何将Activity作为主事件

当然,您可以在Activity之间相互跳转以执行不同的操作。 每次启动新的Activity时,旧的Activity都会停止,但Activity会保留在堆栈或后退堆栈中。

当新的Activity启动时,系统会将其推回堆栈,重点关注用户交互。 当用户完成当前Activity并按“上一步”按钮“是”时,系统将从堆栈中弹出并销毁它,然后返回到上一个Activity

如果Activity由于启动了新的Activity而停止,系统将通过该Activity的生命周期回调方法通知该状态的变化。

Activity有多种变化,具体取决于状态的变化。 每个回调都提供了执行特定操作(具体取决于其状态)的机会

2.Activity生命周期?

周期是指从活动开始到结束所经历的各种状态。 生命周期是指活动从开始到结束所经历的状态。 从一个状态到另一个状态的变化,从无到有,再到无,在这个过程中所经历的状态叫做生命周期。

Activity本质上有四种状态。

1 .运行:Activity是活动的,此时Activity位于栈的顶部,并且是可显示的,并且与用户交互

2 .当暂停:Activity失去焦点、被置于新的非全面屏幕的Activity上、或透明的Activity被置于栈的顶部时,Activity被置于Paused状态现在不会被废弃。 只是失去了与用户交互的能力。 所有状态信息及其成员变量仍然存在,只有在系统内存紧张的情况下才可能被系统回收

3 .停止:Activity被系统完全覆盖后,覆盖的activity将进入停止状态,此时不再可见,但尚未回收资源

4 .系统回收:Activity被系统回收时,activity进入Killed状态

如果活动处于停止或暂停状态,且系统内存不足,请将其退出(finish )或将其杀死(kill )。 在这种异常情况下,系统会调用onSaveInstance (方法以存储信息,并在Activity移动到前台时重新启动Activity以保留和保留该Activity )

以上四种常见状态之间存在其他生命周期,作为不同状态之间的过度,用于在不同状态之间切换。 以下是生命周期的具体说明。

在onCreate ()第一次创建Activity时调用。

onStart ) )在Activity被用户识别之前调用。

onResume ) )在Activity即将开始与用户交互之前调用。 此时,Activity位于Activity堆栈的顶部,并且具有用户输入焦点。 始终为onPause (接在。

onPause ) )在系统即将开始另一个Activity之前调用。 如果Activity返回前台,则接下来是onResume (如果Activity转换为用户不可见,则接下来是onStop )。

onStop ) )在Activity对用户不再可见时调用。 如果Activity恢复与用户的交互,则接onRestart (如果Activity被丢弃,则接onDestroy )。

onDestroy ) )在Activity被销毁之前调用。 这是Activity接收的最后一个调用。

onRe

start()在 Activity 已停止并即将再次启动前调用。始终后接 onStart()。

3.Android四大组件

Android四大基本组件:Activity、BroadcastReceiver广播接收器、ContentProvider内容提供者、Service服务。

Activity:

应用程序中,一个Activity就相当于手机屏幕,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序可以包含许多活动,比如事件的点击,一般都会触发一个新的Activity。

BroadcastReceiver广播接收器:

应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

ContentProvider内容提供者:

内容提供者主要用于在不同应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。只有需要在多个应用程序间共享数据时才需要内容提供者。例如:通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。

Service服务:

是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要长期运行的任务(一边打电话,后台挂着QQ)。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另一个应用程序,服务扔然能够保持正常运行,不过服务并不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉后,所有依赖于该进程的服务也会停止运行(正在听音乐,然后把音乐程序退出)。

4.app测试和web测试有什么区别?

WEB测试和App测试从流程上来说,没有区别。

都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动。

从技术上来说,WEB测试和APP测试其测试类型也基本相似,都需要进行功能测试、性能测试、安全性测试、GUI测试等测试类型。

他们的主要区别在于具体测试的细节和方法有区别,比如:

1、架构区别:WEB项目是B/S架构,基于浏览器的,而APP是C/S架构,必须要有客户端。web测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是app端是不能够保证完全一致的,除非用户更新客户端。如果是app下修改了服务端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。

2、性能测试:在WEB测试只需要测试响应时间这个要素,在App测试中还需要考虑流量、电量、CPU、GPU、Memory、fps(流畅度),安装耗时和启动耗时这些。一般使用emmagee,GT工具测试。

3、兼容性测试:在WEB端是兼容浏览器,在App端兼容的是手机或平板设备。浏览器的兼容则是一般是选择不同的浏览器内核进行测试(IE、chrome、Firefox)。app的测试不仅要看分辨率,屏幕尺寸,还要看设备系统。系统总的来说也就分为Android和iOS,不过国内的Android的定制系统太多,也是比较容易出现问题的。一般app的兼容测试三种方法,云测试,请团队测试,真机测试。云测试咱们稍后再聊,这里说说真机的选择。首先要选择主流的机型,其次要选择不同的分辨率,尺寸,然后就是不同的操作系统。

4、安装测试:WEB测试基本上没有客户端层面的安装测试,但是App测试是存在客户端的,必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、内存不足、安装后删除安装文件,更新的强制更新与非强制更新、增量包更新、断点续传、弱网,卸载后删除app相关的文件等等。升级测试的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。

5、交叉事件测试:就是在操作某个软件的时候,来电话、来短信,电量不足提示等外部事件。

6、操作类型测试:如横屏测试,手势测试,多点触控,前后台切换。

7、网络测试:包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。弱网络的模拟,据说可以用360wifi实现设置。

5.android和ios测试区别?

App测试中ios和Android有哪些区别呢?

1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;

2.多分辨率测试,Android端20多种,ios较少;

3.手机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash);

4.操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等;

5.push测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示);

6.安装卸载测试:Android的下载和安装的平台和工具和渠道比较多,ios主要有app store,iTunes和testflight下载;

7.升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号),

对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)

另外:对于测试还需要注意一下几点:

1.并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音、录音等的播放时强制其他正在播放的要暂停;

2.数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等;

3.push(推送)测试:在开关机、待机状态下执行推送,消息先死及其推送跳转的正确性;

应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转否正确;

推送消息阅读前后数字的变化是否正确;

多条推送的合集的显示和跳转是否正确;

4.分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确;

5.触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会crash等

6.app出现ANR,是什么原因导致的?

那么导致ANR的根本原因是什么呢?简单的总结有以下两点:

1.主线程执行了耗时操作,比如数据库操作或网络编程

2.其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。

细分的话,导致ANR的原因有如下几点:

1.耗时的网络访问

2.大量的数据读写

3.数据库操作

4.硬件操作(比如camera)

5.调用thread的join()方法、sleep()方法、wait()方法或者等待线程锁的时候

6.service binder的数量达到上限

7.system server中发生WatchDog ANR

8.service忙导致超时无响应

9.其他线程持有锁,导致主线程等待超时

10.其它线程终止或崩溃导致主线程一直等待。

7.App出现crash原因有哪些?

为什么App会出现崩溃呢?百度了一下,查到和App崩溃相关的几个因素:内存管理错误,程序逻辑错误,设备兼容,网络因素等,如下:

1.内存管理错误?:可能是可用内存过低,app所需的内存超过设备的限制,app跑不起来导致App crash。

或是内存泄露,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。

亦或非授权的内存位置的使用也可能会导致App crash。

2.程序逻辑错误:?数组越界、堆栈溢出、并发操作、逻辑错误。

e.g. app新添加一个未经测试的新功能,调用了一个已释放的指针,运行的时候就会crash。

3.设备兼容:由于设备多样性,app在不同的设备上可能会有不同的表现。

4.网络因素:可能是网速欠佳,无法达到app所需的快速响应时间,导致app crash。或者是不同网络的切换也可能会影响app的稳定性。

原文:https://blog.csdn.net/jydsh/article/details/47123243

8.app对于不稳定偶然出现anr和crash时候你是怎么处理的?

app偶然出现anr和crash是比较头疼的问题,由于偶然出现无法复现步骤,这也是一个测试人员必备的技能,需要抓日志。查看日志主要有3个方法:

方法一:app开发保存错误日志到本地

一般app开发在debug版本,出现anr和crash的时候会自动把日志保存到本地实际的sd卡上,去对应的app目录取出来就可以了

方法二:实时抓取

当出现偶然的crash时候,这时候可以把手机拉到你们app开发那,手机连上他的开发代码的环境,有ddms会抓日志,这时候出现crash就会记录下来日志。

尽量重复操作让bug复现就可以了

也可以自己开着logcat,保存日志到电脑本地,参考这篇:https://www.cnblogs.com/yoyoketang/p/9101365.html

adb logcat | find "com.sankuai.meituan" >d:hello.txt

方法三:第三方sdk统计工具

一般接入了第三方统计sdk,比如友盟统计,在友盟的后台会抓到报错的日志

9.app的日志如何抓取?

app本身的日志,可以用logcat抓取,参考这篇:https://www.cnblogs.com/yoyoketang/p/9101365.html

adb logcat | find "com.sankuai.meituan" >d:hello.txt

也可以用ddms抓取,手机连上电脑,打开ddms工具,或者在Android Studio开发工具中,打开DDMS

关于ddms更多的功能,参考这篇:https://www.cnblogs.com/gaobig/p/5029381.html

10.你平常会看日志吗, 一般会出现哪些异常(Exception)?

这个主要是面试官考察你会不会看日志,是不是看得懂java里面抛出的异常,Exception

一般面试中java Exception(runtimeException )是必会被问到的问题

app崩溃的常见原因应该也是这些了。常见的异常列出四五种,是基本要求。

常见的几种如下:

NullPointerException - 空指针引用异常

ClassCastException - 类型强制转换异常。

IllegalArgumentException - 传递非法参数异常。

ArithmeticException - 算术运算异常

ArrayStoreException - 向数组中存放与声明类型不兼容对象异常

IndexOutOfBoundsException - 下标越界异常

NegativeArraySizeException - 创建一个大小为负数的数组错误异常

NumberFormatException - 数字格式异常

SecurityException - 安全异常

UnsupportedOperationException - 不支持的操作异常

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。