【发布时间】:2016-06-23 01:37:41
【问题描述】:
我之前发布过this 问题,结论是我需要更多调试才能了解应用程序的生命周期。下面是后续,其实我更困惑。
我的Application.onCreate 方法被调用了两次:一次是在应用程序启动时,一次是在我关闭它时。这应该发生吗?问题是,我有一个服务,我想在应用程序启动时启动并在应用程序终止时停止。显然onCreate 在这两种情况下都被调用了?请指教。
注意:我目前对后台执行不感兴趣。
编辑:当关闭应用程序时,Application.onCreate 被称为 afer 主要活动的Activity.onDestroy。我不确定这有什么关系,只会增加混乱。应用程序正在“创建” 其主要活动被破坏?没有意义。
编辑:在这里留下一个示例日志。我第一次运行该应用程序,然后通过点击“全部清除”将其关闭。我相信这将使服务在后台运行。该日志是我第二次运行该应用程序。请注意,onCreate 在应用启动时不会被调用,而是在我关闭它后被调用:
06-22 19:54:29.971 2504-2504/com.demo.demochatdemo I/PhoneWindow: [generateLayout] setColorNavigationBar => color=0x ff000001 06-22 19:54:29.981 2504-2504/com.demo.demochatdemo D/PhoneWindowEx: [PWEx][generateLayout] setNavigationBarColor2 : 颜色=0xff000000 06-22 19:54:29.981 2504-2504/com.demo.demochatdemo I/PhoneWindow: [setNavigationBarColor2] 颜色=0x ff000000 06-22 19:54:30.001 2504-2504/com.demo.demochatdemo I/活动:Activity.onPostResume() 致电 06-22 19:54:30.011 2504-2504/com.demo.demochatdemo I/ViewRootImpl:CPU 渲染 VSync 启用 = true 06-22 19:54:30.011 2504-3647/com.demo.demochatdemo D/OpenGLRenderer:使用 EGL_SWAP_BEHAVIOR_PRESERVED:真 06-22 19:54:30.021 2504-2504/com.demo.demochatdemo D/Atlas:验证地图... 06-22 19:54:30.051 2504-3647/com.demo.demochatdemo I/Adreno-EGL: : EGL 1.4 高通构建: (Iac7c2e2837) OpenGL ES 着色器编译器版本:E031.25.03.04 建造日期:2015 年 7 月 8 日星期三 本地分公司:LA_BR_1_2_3_RB1_AU080_1285665 远程分支: 本地补丁: 重构分支:06-22 19:54:30.051 2504-3647/com.demo.demochatdemo I/OpenGLRenderer:初始化 EGL, 版本 1.4 06-22 19:54:30.061 2504-3647/com.demo.demochatdemo D/OpenGLRenderer:启用调试模式 0 06-22 19:54:30.161 2504-2504/com.demo.demochatdemo V/ViewRootImpl:内容绘图 完成:com.demo.demochatdemo/com.demo.demochatdemo.ContactActivity 06-22 19:54:30.171 2504-2504/com.demo.demochatdemo W/IInputConnectionWrapper:非活动 InputConnection 上的 showStatusIcon 06-22 19:54:30.171 2504-2504/com.demo.demochatdemo I/时间线: 时间线:Activity_idle id:android.os.BinderProxy@31f3e056 时间:150361131
此时我关闭应用程序并获得以下信息:
06-22 19:54:40.621 2504-2504/com.demo.demochatdemo I/活动: Activity.onPostResume() 调用 06-22 19:54:40.641 2504-2504/com.demo.demochatdemo I/时间线:时间线:Activity_idle id:android.os.BinderProxy@31f3e056 时间:150371603 06-22 19:54:46.861 4061-4061/com.demo.demochatdemo I/com.demo.demochatdemo.ContactActivity: onCreate
onCreate 正在那里被调用。
编辑:这是清单:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.demo.demochatdemo">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name="com.demo.demochatdemo.ChatApplication">
<activity
android:name=".ContactActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ChatActivity">
</activity>
</application>
</manifest>
编辑:这是活动的代码。
公共类 ContactActivity 扩展 Activity 实现 Store.Delegate {
private static final String TAG = ContactActivity.class.getName();
private String displayName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView listView;
final ChatApplication chatApplication = (ChatApplication)getApplication();
final ContactActivity contactActivity = this;
setContentView(R.layout.contact_view);
listView = (ListView) findViewById(R.id.contact_view);
listView.setAdapter(new ContactViewAdapter(this, chatApplication.getStores(), new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (MotionEvent.ACTION_UP == motionEvent.getAction()) {
Intent intent = new Intent(ContactActivity.this, ChatActivity.class);
TextView displayName = (TextView) view.findViewById(R.id.display_name);
CharSequence charSequence = displayName.getText();
setDisplayName(charSequence.toString());
intent.putExtra(ChatActivity.INTENT_EXTRA_STORE, charSequence);
startActivity(intent);
}
return true;
}
}));
}
}
【问题讨论】:
-
也许其他东西正在创建应用程序的新实例,我建议您生成带有更多信息的日志/跟踪以确认这一点
-
@meda 已更新,请修改!
-
@AndréFratelli 你能附上你的清单文件吗?
-
@ShobhitPuri 清单已添加。我觉得这一切都很奇怪,因为该应用真的很简单。
-
这应该对你有帮助 - stackoverflow.com/questions/22079232/…