判断一个activity初始化是否完毕的方法

有的时候我们需要判断一个activity是否初始化完毕,比如说activity初始化时弹出一个popwindow,直接写的话会报错,这里提供一个方法

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/main"
android:orientation="vertical" >


</LinearLayout>




/***************** 以下代码用来循环检测activity是否初始化完毕 ***************/
Runnable showPopWindowRunnable = new Runnable() {


@Override
public void run() {
// 得到activity中的根元素
View view = findViewById(R.id.main);
// 如何根元素的width和height大于0说明activity已经初始化完毕
if (view != null && view.getWidth() > 0 && view.getHeight() > 0) {
此处代表改activity已经初始化完毕
// 停止检测
mHandler.removeCallbacks(this);
} else {
// 如果activity没有初始化完毕则等待5毫秒再次检测
mHandler.postDelayed(this, 5);
}
}
};
// 开始检测
mHandler.post(showPopWindowRunnable);
/****************** 以上代码用来循环检测activity是否初始化完毕 *************/

### Android 应用程序启动流程详解 #### 启动请求发起 当用户点击应用图标或其他方式触发应用启动时,`startActivity()` 方法被调用。此方法负责构建意图(Intent),并通过Intent传递给系统服务层,向 `ActivityManagerService (AMS)` 发送启动新 Activity 的请求[^3]。 #### 请求处理与准备阶段 AMS 收到启动请求后,解析 Intent 中携带的信息,确定要启动的目标组件及其属性,如启动模式等。接着 AMS 进行一系列准备工作,包括但不限于: - 如果当前有其他 Activity 正处于前台展示,则先让其执行 `onPause()` 操作; - 判断目标 Activity 所属的应用进程是否已存在;如果不存在则创建新的进程实例,并等待该进程中 Application 对象初始化完毕。 #### 创建并显示Activity 一旦上述条件满足,AMS 将指示相应进程内的客户端(通常是应用程序的主线程)通过 `realStartActivity()` 函数继续后续工作。具体来说,在客户端内部会发生如下事件序列: 1. 调用 `scheduleLaunchActivity()` 方法将 LAUNCH_ACTIVITY 消息放入消息队列中。 2. 当轮询到这条消息时,由 `handleLaunchActivity()` 处理它。 3. 接着调用了 `performLaunchActivity()` 来真正地创建一个新的 Activity 实例,并依次回调它的 `onCreate()`, `onStart()` 生命周期函数。 4. 最终再经由 `handleResumeActivity()` 去触发展示前最后一个重要的生命周期钩子——`onResume()`,此时 Activity 已完全就绪可与用户互动[^2]。 ```java // 示例代码片段展示了部分关键逻辑 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 设置UI布局文件 // 初始化操作... } @Override protected void onStart(){ super.onStart(); // 让Activity变得可见... } @Override public void onResume(){ super.onResume(); // 开始接收用户的输入... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值