旋屏时,OnCreate方法重复调用的解决

Android设备屏幕自动横竖旋转时,每次都会重新调用onCreate函数进行初始化操作,如果遇到加载数据量稍微大点的时候就需要等待很长时间,用户体验较差,其实可以通过配置AndroidManifest文件来改变程序的执行流程,从而避免旋屏时onCreate函数的多次调用。


1. 修改AndroidManifest.xml文件,在activity标签下面增加参数:

< activity android:name="MyActivity"

android:configChanges="orientation|keyboardHidden">


2. 在MyActivity 中重载onConfigurationChanged(每次切屏的时候会自动调用)方法,初始化横竖屏方向不同的显示界面,以及其他数据的初始化操作:
Java代码 收藏代码
  1. @Override
  2. publicvoidonConfigurationChanged(ConfigurationnewConfig){
  3. super.onConfigurationChanged(newConfig);
  4. /*
  5. if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){
  6. //加入横屏要处理的代码
  7. }elseif(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){
  8. //加入竖屏要处理的代码
  9. }
  10. */
  11. }
Android中进行单元测试,想要模拟Service的`onCreate()`方法通常是在编写测试类,利用Mockito等测试框架来创建Mock对象。以下是一个简单的步骤示例: 1. **添加依赖**:首先,你需要在项目中引入Mockito库,例如在Gradle构建脚本中的dependencies部分添加: ```groovy testImplementation 'org.mockito:mockito-core:3.x.y' androidTestImplementation 'org.mockito:mockito-android:3.x.y' ``` 2. **创建Mock对象**:创建Service的一个Mock实例,这将会是一个空的、不会真正启动的服务,你可以控制它接收到的方法调用: ```java @Mock MyService myService; ``` 3. **设置方法行为**:使用`doAnswer()`或`when()`方法来设定`onCreate()`方法的行为,比如让它返回特定的结果或者抛出异常: ```java // 如果你想让onCreate()正常返回 doNothing().when(myService).onCreate(); // 或者如果你想让它抛出异常 when(myService.onCreate()).thenThrow(new RuntimeException("Simulated exception")); ``` 4. **启动服务并验证**:然后,在你的测试方法里,通过测试框架启动你的Mock Service,并检查期望的行为是否发生: ```java PowerMockito.mockStatic(MyService.class); // 如果使用PowerMockito PowerMockito.whenNew(MyService.class).withNoArguments().thenReturn(myService); try { yourTestClassUnderTest.startMyService(); // 调用实际需要测试的方法,会触发Service的创建 verify(myService, times(1)).onCreate(); // 验证方法调用了 } finally { PowerMockito.verifyStatic(); } ``` 记得清理掉Mock对象,避免影响其他测试: ```java verifyZeroInteractions(myService); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值