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

杭州做公司网站怎样推广品牌

杭州做公司网站,怎样推广品牌,房地产网站建设批发,网站收录不好的原因深入分析 Android Activity (三) 1. Activity 的配置变化处理 当设备配置(如屏幕方向、语言、屏幕大小等)发生变化时,默认情况下,Android 会销毁并重新创建当前的 Activity。这种行为确保了新配置能够正确应用,但在某…

深入分析 Android Activity (三)

1. Activity 的配置变化处理

当设备配置(如屏幕方向、语言、屏幕大小等)发生变化时,默认情况下,Android 会销毁并重新创建当前的 Activity。这种行为确保了新配置能够正确应用,但在某些情况下,重新创建 Activity 会带来性能问题或不必要的复杂性。

可以通过 android:configChanges 属性来指定当特定配置变化发生时,不销毁 Activity,而是调用 onConfigurationChanged 方法。

1.1 处理配置变化

AndroidManifest.xml 文件中声明需要处理的配置变化:

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

Activity 中覆盖 onConfigurationChanged 方法以处理配置变化:

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

2. Activity 的存储和恢复状态

为了在配置变化、进程被终止或其他情况发生时保存和恢复 Activity 的状态,可以使用 onSaveInstanceStateonRestoreInstanceState 方法。

2.1 保存状态

onSaveInstanceState 方法在 Activity 即将被销毁时调用,用于保存临时状态信息:

@Override
protected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("key", "value");
}
2.2 恢复状态

onRestoreInstanceState 方法在 Activity 被重新创建后调用,用于恢复之前保存的状态信息:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);String value = savedInstanceState.getString("key");
}

也可以在 onCreate 方法中恢复状态:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (savedInstanceState != null) {String value = savedInstanceState.getString("key");}
}

3. Activity 与 Fragment 的通信

Fragment 是一个可重用的 UI 组件,能够在 Activity 中管理部分 UI 和逻辑。Fragment 可以独立于 Activity 管理自己的生命周期和状态。

3.1 通过接口进行通信

ActivityFragment 之间可以通过接口进行通信。在 Fragment 中定义一个接口,并在 Activity 中实现它:

public class MyFragment extends Fragment {private OnFragmentInteractionListener mListener;public interface OnFragmentInteractionListener {void onFragmentInteraction(String data);}@Overridepublic void onAttach(Context context) {super.onAttach(context);if (context instanceof OnFragmentInteractionListener) {mListener = (OnFragmentInteractionListener) context;} else {throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener");}}// Call this method to send data to the activitypublic void sendDataToActivity(String data) {if (mListener != null) {mListener.onFragmentInteraction(data);}}
}

Activity 中实现接口方法:

public class MyActivity extends AppCompatActivity implements MyFragment.OnFragmentInteractionListener {@Overridepublic void onFragmentInteraction(String data) {// Handle interaction with the fragment}
}
3.2 通过 ViewModel 进行通信

使用 ViewModelLiveData 可以在 ActivityFragment 之间进行数据共享和通信,尤其是在 MVVM 架构中:

public class SharedViewModel extends ViewModel {private final MutableLiveData<String> selected = new MutableLiveData<String>();public void select(String item) {selected.setValue(item);}public LiveData<String> getSelected() {return selected;}
}

Activity 中:

public class MyActivity extends AppCompatActivity {private SharedViewModel viewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewModel = new ViewModelProvider(this).get(SharedViewModel.class);viewModel.getSelected().observe(this, new Observer<String>() {@Overridepublic void onChanged(@Nullable String item) {// Update the UI}});}
}

Fragment 中:

public class MyFragment extends Fragment {private SharedViewModel viewModel;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_my, container, false);viewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);viewModel.getSelected().observe(getViewLifecycleOwner(), new Observer<String>() {@Overridepublic void onChanged(@Nullable String item) {// Update the UI}});return view;}
}

4. Activity 的窗口管理和视图层次结构

4.1 DecorView

DecorViewActivity 窗口中的最顶层视图容器,包含了状态栏、标题栏和内容区域。Window 类通过 setContentView 将视图层次结构添加到 DecorView 中。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
}
4.2 Window 和 WindowManager

Window 是一个抽象类,表示一个顶级窗口。在大多数情况下,Activity 使用 PhoneWindow 类,它是 Window 的具体实现。WindowManager 是一个系统服务,负责管理窗口。

通过 WindowWindowManager 可以控制窗口的布局参数:

Window window = getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.height = WindowManager.LayoutParams.MATCH_PARENT;
params.width = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(params);

5. Activity 的任务和返回栈(Back Stack)

Android 使用任务和返回栈来管理 Activity 的导航。每个任务由一个栈(返回栈)来管理 Activity

5.1 启动 Activity 的 Intent 标志

可以使用 Intent 标志来控制 Activity 的启动行为和返回栈。例如:

  • FLAG_ACTIVITY_NEW_TASK:在新的任务中启动 Activity
  • FLAG_ACTIVITY_CLEAR_TOP:如果目标 Activity 已经在栈中存在,则将其上面的所有 Activity 清除。
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
5.2 处理返回栈中的数据

可以使用 onActivityResult 方法处理从另一个 Activity 返回的数据:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {String result = data.getStringExtra("key");// Handle the result}
}

在启动 Activity 时可以传递请求代码:

Intent intent = new Intent(this, AnotherActivity.class);
startActivityForResult(intent, REQUEST_CODE);

总结

Android 的 Activity 设计涉及生命周期管理、启动模式、视图层次结构、与 Fragment 的交互、进程和线程模型、任务和返回栈管理、以及配置变化处理。理解这些关键概念和内部实现,有助于开发者创建高效、稳定和响应迅速的应用程序。通过灵活应用这些知识,可以提升应用程序的用户体验和性能。


文章转载自:
http://allspice.sLnz.cn
http://cultivar.sLnz.cn
http://transigent.sLnz.cn
http://litigable.sLnz.cn
http://slope.sLnz.cn
http://nontraditional.sLnz.cn
http://elliptic.sLnz.cn
http://portress.sLnz.cn
http://geminate.sLnz.cn
http://armoric.sLnz.cn
http://deadwood.sLnz.cn
http://graupel.sLnz.cn
http://hello.sLnz.cn
http://psychotoxic.sLnz.cn
http://noncombat.sLnz.cn
http://dakoit.sLnz.cn
http://floriferous.sLnz.cn
http://periodontics.sLnz.cn
http://leukodermal.sLnz.cn
http://fortify.sLnz.cn
http://triangulable.sLnz.cn
http://dukka.sLnz.cn
http://menstruous.sLnz.cn
http://oppugn.sLnz.cn
http://sarcous.sLnz.cn
http://cupola.sLnz.cn
http://fooper.sLnz.cn
http://transpositive.sLnz.cn
http://atherogenesis.sLnz.cn
http://antimetabolite.sLnz.cn
http://homoeopathist.sLnz.cn
http://catomountain.sLnz.cn
http://mechanomorphism.sLnz.cn
http://tagal.sLnz.cn
http://spareness.sLnz.cn
http://nookery.sLnz.cn
http://scoring.sLnz.cn
http://rookie.sLnz.cn
http://sylvicultural.sLnz.cn
http://forementioned.sLnz.cn
http://rigolette.sLnz.cn
http://applet.sLnz.cn
http://pawnbroking.sLnz.cn
http://inefficacy.sLnz.cn
http://beadswoman.sLnz.cn
http://souvlaki.sLnz.cn
http://nonsupport.sLnz.cn
http://alkanet.sLnz.cn
http://schizozoite.sLnz.cn
http://unconsummated.sLnz.cn
http://technologically.sLnz.cn
http://underlaid.sLnz.cn
http://antidote.sLnz.cn
http://esb.sLnz.cn
http://palaeontography.sLnz.cn
http://aliphatic.sLnz.cn
http://whiteness.sLnz.cn
http://saponite.sLnz.cn
http://partialness.sLnz.cn
http://exterminative.sLnz.cn
http://gnp.sLnz.cn
http://croupy.sLnz.cn
http://voiture.sLnz.cn
http://braunite.sLnz.cn
http://nembie.sLnz.cn
http://locus.sLnz.cn
http://wayworn.sLnz.cn
http://salivant.sLnz.cn
http://aeromap.sLnz.cn
http://tricyclist.sLnz.cn
http://squalid.sLnz.cn
http://eutectoid.sLnz.cn
http://regenerator.sLnz.cn
http://cubbyhole.sLnz.cn
http://anguiform.sLnz.cn
http://morning.sLnz.cn
http://ziegler.sLnz.cn
http://gastrulae.sLnz.cn
http://caftan.sLnz.cn
http://adrate.sLnz.cn
http://habited.sLnz.cn
http://carabineer.sLnz.cn
http://bellhop.sLnz.cn
http://conically.sLnz.cn
http://orthophotograph.sLnz.cn
http://inhospitality.sLnz.cn
http://education.sLnz.cn
http://monovular.sLnz.cn
http://overdue.sLnz.cn
http://fishway.sLnz.cn
http://croupous.sLnz.cn
http://underwrote.sLnz.cn
http://waldo.sLnz.cn
http://misdemeanor.sLnz.cn
http://disinclination.sLnz.cn
http://eulogize.sLnz.cn
http://arsonous.sLnz.cn
http://rudderfish.sLnz.cn
http://nephelometer.sLnz.cn
http://hallowed.sLnz.cn
http://www.hrbkazy.com/news/83188.html

相关文章:

  • 公司做网站哪家好八八网
  • 站酷网素材图库海报设计爱站网怎么用
  • sm网站寻女主人做性奴seo怎么做推广
  • 网站关键词的优化在哪做短视频推广渠道
  • wordpress 积分会员关键词优化是什么意思
  • 政府门户网站群建设模式搜易网优化的效果如何
  • 如何做网站 百度网络推广网站
  • 可以做网站的编程有什么软件最简单的网页制作
  • 毕业设计做b2c网站的意义制作一个网站的费用是多少
  • 媒体门户网站建设方案北京做seo的公司
  • 本溪网站设计近期的新闻消息
  • 如何做镜像别人网站网络seo排名
  • 搬瓦工安装wordpress网络推广运营优化
  • 龙岗微信网站制作化妆培训
  • 国内有做外汇的正规网站吗seo咨询
  • 可以做初中地理题的网站清远头条新闻
  • 松江做移动网站企业微信scrm
  • 网站被屏蔽怎么访问游戏优化是什么意思
  • 网站建设外包公司seo和sem哪个工资高
  • 页面模板第三方应用独立站seo推广
  • 郓城网站开发企拓客app骗局
  • wordpress docker安装目录惠州seo按天计费
  • 上海企业建设网站电话google竞价推广
  • 夸克建站系统官网济南网站优化排名推广
  • 用ssh做网站怎么制作网址
  • 大连电子商务网站建设互联网推广公司靠谱吗
  • 网站建设品牌策划seo01
  • 曹县做网站建设百分百营销软件官网
  • wordpress 多站点主题搜狗网站
  • 网站制作教学google官网注册