当前位置: 首页 > news >正文

做网站设计公司价格seo搜索引擎优化简历

做网站设计公司价格,seo搜索引擎优化简历,网站建设公司哪家好磐石网络真好,生物信息网站建设文章目录 深入分析 Android Activity (十一)1. Activity 的内存管理和优化1.1 内存泄漏的常见原因1.2 避免内存泄漏的方法1.3 内存泄漏检测工具 2. Activity 的配置变更处理2.1 处理配置变更2.2 保存和恢复状态2.3 使用 ViewModel 3. Activity 的测试3.1 单元测试3.2 UI 测试 4…

文章目录

    • 深入分析 Android Activity (十一)
    • 1. Activity 的内存管理和优化
      • 1.1 内存泄漏的常见原因
      • 1.2 避免内存泄漏的方法
      • 1.3 内存泄漏检测工具
    • 2. Activity 的配置变更处理
      • 2.1 处理配置变更
      • 2.2 保存和恢复状态
      • 2.3 使用 ViewModel
    • 3. Activity 的测试
      • 3.1 单元测试
      • 3.2 UI 测试
    • 4. Activity 与 Fragment 的关系
      • 4.1 添加 Fragment
      • 4.2 处理 Fragment 生命周期
      • 4.3 Fragment 之间的通信
    • 总结

深入分析 Android Activity (十一)

1. Activity 的内存管理和优化

内存管理是 Android 开发中非常重要的一部分。内存泄漏会导致应用崩溃和性能问题,因此需要在开发过程中注意内存管理和优化。

1.1 内存泄漏的常见原因

  • 静态引用:静态变量持有 Activity 的引用会导致内存泄漏。
  • 未取消的监听器:忘记注销注册的监听器或回调会导致内存泄漏。
  • Handler 内存泄漏:匿名内部类 Handler 引用外部类实例,会导致外部类无法被回收。
  • 长时间运行的线程:线程持有 Activity 的引用,在 Activity 销毁后线程未终止,会导致内存泄漏。

1.2 避免内存泄漏的方法

  • 使用弱引用:使用 WeakReference 持有 Activity 的引用。
  • 及时取消监听器和回调:在 onDestroy 或其他适当时机取消监听器和回调。
  • 静态内部类:使用静态内部类避免持有外部类的引用。
  • 使用 Application Context:在适当场景下使用 Application Context 而非 Activity Context。
// 使用 WeakReference 避免内存泄漏
private static class MyHandler extends Handler {private final WeakReference<MyActivity> mActivity;public MyHandler(MyActivity activity) {mActivity = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {MyActivity activity = mActivity.get();if (activity != null) {// Handle message}}
}

1.3 内存泄漏检测工具

  • LeakCanary:一个内存泄漏检测工具,可以帮助检测内存泄漏。
// 在 Application 类中初始化 LeakCanary
public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();if (LeakCanary.isInAnalyzerProcess(this)) {return;}LeakCanary.install(this);}
}

2. Activity 的配置变更处理

配置变更(如屏幕旋转、语言切换)会导致 Activity 被销毁和重建,需要妥善处理以保存和恢复数据。

2.1 处理配置变更

可以在 AndroidManifest.xml 中通过 android:configChanges 属性指定处理配置变更。

<activity android:name=".MyActivity"android:configChanges="orientation|screenSize|keyboardHidden"/>

在 Activity 中重写 onConfigurationChanged 方法。

@Override
public void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {// Handle orientation change to landscape} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {// Handle orientation change to portrait}
}

2.2 保存和恢复状态

在配置变更时,可以通过 onSaveInstanceStateonRestoreInstanceState 方法保存和恢复数据。

@Override
protected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("key", "value");
}@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);if (savedInstanceState != null) {String value = savedInstanceState.getString("key");}
}

2.3 使用 ViewModel

可以使用 ViewModel 在配置变更期间保存 UI 相关数据。

public class MyViewModel extends ViewModel {private MutableLiveData<String> data;public LiveData<String> getData() {if (data == null) {data = new MutableLiveData<>();loadData();}return data;}private void loadData() {// Load data asynchronously}
}// 在 Activity 中使用 ViewModel
MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class);
viewModel.getData().observe(this, new Observer<String>() {@Overridepublic void onChanged(String s) {// Update UI}
});

3. Activity 的测试

测试是确保应用质量的重要步骤,包括单元测试和 UI 测试。

3.1 单元测试

可以使用 JUnit 进行单元测试。

// 使用 JUnit 测试 Activity 中的方法
@RunWith(AndroidJUnit4.class)
public class MyActivityTest {@Testpublic void testActivityMethod() {Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();assertEquals("com.example.myapp", appContext.getPackageName());}
}

3.2 UI 测试

可以使用 Espresso 进行 UI 测试。

// 使用 Espresso 进行 UI 测试
@RunWith(AndroidJUnit4.class)
public class MyActivityUITest {@Rulepublic ActivityScenarioRule<MyActivity> activityScenarioRule = new ActivityScenarioRule<>(MyActivity.class);@Testpublic void testButtonClick() {onView(withId(R.id.my_button)).perform(click());onView(withId(R.id.my_text_view)).check(matches(withText("Button clicked")));}
}

4. Activity 与 Fragment 的关系

Fragment 是在 Activity 中的可重用组件,用于实现灵活的 UI 设计。

4.1 添加 Fragment

可以在 XML 布局文件中添加 Fragment,也可以在代码中动态添加。

<!-- 在 XML 布局文件中添加 Fragment -->
<fragmentandroid:id="@+id/my_fragment"android:name="com.example.MyFragment"android:layout_width="match_parent"android:layout_height="match_parent"/>
// 在代码中动态添加 Fragment
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragment fragment = new MyFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

4.2 处理 Fragment 生命周期

Fragment 的生命周期与 Activity 类似,但有自己独特的生命周期方法。

public class MyFragment extends Fragment {@Overridepublic void onAttach(Context context) {super.onAttach(context);// Fragment 被添加到 Activity 时调用}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// Fragment 初始化时调用}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// 为 Fragment 创建视图时调用return inflater.inflate(R.layout.fragment_my, container, false);}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);// Activity 的 onCreate 方法返回时调用}@Overridepublic void onStart() {super.onStart();// Fragment 可见时调用}@Overridepublic void onResume() {super.onResume();// Fragment 交互时调用}@Overridepublic void onPause() {super.onPause();// Fragment 不可见时调用}@Overridepublic void onStop() {super.onStop();// Fragment 停止时调用}@Overridepublic void onDestroyView() {super.onDestroyView();// Fragment 视图被销毁时调用}@Overridepublic void onDestroy() {super.onDestroy();// Fragment 被销毁时调用}@Overridepublic void onDetach() {super.onDetach();// Fragment 从 Activity 中分离时调用}
}

4.3 Fragment 之间的通信

可以使用接口在 Fragment 之间进行通信。

// 定义接口
public interface OnFragmentInteractionListener {void onFragmentInteraction(String data);
}// 在 Fragment 中实现接口
public class MyFragment extends Fragment {private OnFragmentInteractionListener mListener;@Overridepublic void onAttach(Context context) {super.onAttach(context);if (context instanceof OnFragmentInteractionListener) {mListener = (OnFragmentInteractionListener) context;} else {throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener");}}public void someMethod() {if (mListener != null) {mListener.onFragmentInteraction("Some data");}}
}// 在 Activity 中实现接口
public class MyActivity extends AppCompatActivity implements OnFragmentInteractionListener {@Overridepublic void onFragmentInteraction(String data) {// Handle the data from the fragment}
}

总结

通过对 Android Activity 的深入理解和灵活应用,可以实现丰富的用户体验和高效的应用程序。理解其生命周期、权限管理、数据传递、动画效果、导航和返回栈管理、资源管理、配置变更处理、视图层次结构、性能优化、内存管理、测试、Service 交互、BroadcastReceiver

欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力

在这里插入图片描述

http://www.tj-hxxt.cn/news/33707.html

相关文章:

  • 湖南长沙app网络优化的工作内容
  • 长沙网站公司课程培训
  • 中央政策门户网站农村信息化综合服务平台建设取得显著成效湘潭seo公司
  • 大庆油田内网主页网址seo在线外链
  • python购物网站开发流程图网络营销的内涵
  • 烟台做网站的公司专业网络推广机构
  • 河东苏州网站建设线上推广活动有哪些
  • 网站制作项目执行今日新闻头条新闻最新
  • 重庆市建设工程信息网官网安全监督渝快办seo查询平台
  • 免费推广店铺的网站优质网站
  • 设计网站建设图片seo超级外链
  • 网站开发语言用什么好自己怎么做网页推广
  • 网站下方链接图标怎么做怎么卸载windows优化大师
  • 吉安网站开发seo公司优化方案
  • 长沙招聘网站有哪些国家域名注册服务网
  • 织梦cms做网站教程视频如何制作一个属于自己的网站
  • 个人做房产网站怎么进行网络推广
  • 东莞做企业网站企业网络推广的方法有哪些
  • 十堰网站开发上海好的网络推广公司
  • 项目合作网站软件优化
  • 做数学题目在哪个网站好明星百度指数排行
  • 哈尔滨网站设计哪家公司好广州seo服务公司
  • 专卖手表的网站百度极简网址
  • 张家界建设企业网站seo是啥意思
  • asp做留言板网站seo黑帽教学网
  • 佛山新网站建设详细内容小学生关键词大全
  • WordPress本地可以调出点赞功能吗口碑seo推广公司
  • php网站制作常用代码网站免费发布与推广
  • 成都网站制作汕头品牌宣传文案范文
  • WordPress又拍云cdn志鸿优化设计官网