我刚刚浏览了Android Developer Site,刷新了Activity Life周期,在每个代码示例中,超类方法旁边都有一条注释,"首先调用超类方法".
虽然这在创建半周期中有意义:onCreate,onStart和onResume,但我对于破坏半周期的正确程序有点困惑:onPause,onStop,onDestroy.
在破坏实例特定资源可能依赖的超类资源之前,首先销毁实例特定资源是有意义的,而不是反过来.但是注释建议不然.我错过了什么?
编辑:由于人们似乎对问题的意图感到困惑,我想知道的是以下哪一项是正确的?为什么?
1.Google建议
@Override
protected void onStop() {
super.onStop(); // Always call the superclass method first
//my implementation here
}
Run Code Online (Sandbox Code Playgroud)
另一种方式
@Override
protected void onStop() {
//my implementation here
super.onStop();
}
Run Code Online (Sandbox Code Playgroud) 以下是我的应用程序的布局:
我怎样才能做到这一点?
这是我的MainActivity:
@Override
protected void onResume(){
super.onResume();
isLoggedIn = prefs.getBoolean("isLoggedIn", false);
if(!isLoggedIn){
showLoginActivity();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的LoginActivity:
@Override
protected void onPostExecute(JSONObject json) {
String authorized = "200";
String unauthorized = "401";
String notfound = "404";
String status = new String();
try {
// Get the messages array
JSONObject response = json.getJSONObject("response");
status = response.getString("status");
if(status.equals(authorized)){
Toast.makeText(getApplicationContext(), "You have been logged into the app!",Toast.LENGTH_SHORT).show();
prefs.edit().putBoolean("isLoggedIn",true);
setResult(RESULT_OK, getIntent());
finish();
}
else if (status.equals(unauthorized)){
Toast.makeText(getApplicationContext(), "The username and password you …Run Code Online (Sandbox Code Playgroud) java android activity-lifecycle android-lifecycle android-activity
Android 活动文档中的一个片段(向下滚动到" 前景生命周期 "行)说:
活动可以频繁地进出前台 - 例如,
onPause()当设备进入睡眠状态或出现对话框时调用.
我不太明白这一点.在什么情况下会发生这种情况?被onPause()称为仅如果有问题的对话的上下文是从顶部其活性的对话框将显示不同?
通过文档中的上述引用,onPause()当下面代码中的AlertDialog(或只是Dialog)显示时,我的activity的方法是否会被调用?显示对话框时,我应该看到"onPause called"日志条目吗?
但我不认为会发生这种情况.它也不应该,如果我已正确理解Android生命周期!那么,文件指向的是什么呢?
public class LifeCycleTestActivity extends Activity {
private static final String TAG = "LifeCycleTest";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick");
AlertDialog dialog = new AlertDialog.Builder(LifeCycleTestActivity.this).create();
dialog.setMessage("You Clicked on the …Run Code Online (Sandbox Code Playgroud) 我知道片段的视图层次结构必须在onCreateView中膨胀,但onCreateView还有什么其他功能可以等待onActivityCreated?我当前的实现对所有内容使用单独的活动,典型的活动在其onCreate方法中完成大部分工作,包括膨胀视图,设置内容视图,使用数据初始化各种小部件,设置监听器等.
那么这可能会全部转移到onCreateView上,还是应该将某些函数放入onActivityCreated方法呢?
lifecycle android android-lifecycle android-fragments android-activity
我刚刚开始使用android开发并尝试使用Room库。从昨天开始我就面临着这个警告信息
w:[kapt]请求了增量注释处理,但是由于以下处理器不是增量处理器,因此禁用了支持:androidx.lifecycle.LifecycleProcessor(NON_INCREMENTAL),androidx.room.RoomProcessor(NON_INCREMENTAL)。
我已经尝试研究和修复,但无法避免此错误,这是我的grale.build文件。请提出建议/建议我在做什么错。
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "ps.room.bookkeeper"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation":"$projectDir/schemas".toString()]
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// …Run Code Online (Sandbox Code Playgroud) 任何人都可以给我一个onResume()在Android 中使用的例子吗?
另外,如果我想在另一个执行结束时重新启动活动,执行哪个方法 - onCreate()或者onResume()?
如果我想更新数据,我该如何处理它 onResume()?
我正在扩展Application类以使用一些需要上下文的全局变量.我知道Application类中的onCreate()方法在活动中的任何其他onCreate()之前被调用,但是我想知道Application类中是否有onDestroy()或类似方法可以被覆盖以便我能够将变量存储在持久性内存中,取消注册侦听器并在应用程序进程被杀之前将最后一条消息发送到服务器吗?如果没有,还有其他办法吗?
我发现Fragment #setRetainInstance(true)令人困惑.这是从Android Developer API中提取的Javadoc :
public void setRetainInstance(boolean retain)
控制是否在活动重新创建(例如从配置更改)中保留片段实例.这只能用于不在后栈中的片段.如果设置,则在重新创建活动时,片段生命周期会略有不同:
- onDestroy()不会被调用(但是onDetach()仍然会被调用,因为片段正在与其当前活动分离.
- 因为片段没有被重新创建,所以不会调用onCreate(Bundle).
- onAttach(活动)和onActivityCreated(捆绑)将仍然被调用.
问题:作为开发人员,您如何使用它,为什么它会使事情变得更容易?
FATAL EXCEPTION: main
Process: com.example.loan, PID: 24169
java.lang.IllegalStateException: Fragment already added: FormFragment{428f10c8 #1 id=0x7f050055 form}
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1192)
at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:722)
at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1533)
at android.support.v4.app.FragmentManagerImpl$2.run(FragmentManager.java:489)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:450)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5068)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
所以,我有一个使用tabhost构建的Android应用程序.共有三个选项卡,在tab2中,有一个按钮用于在tab2中进行片段事务(在片段活动中调用该函数)
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.realtabcontent, mFrag);
t.addToBackStack(null);
t.commit();
Run Code Online (Sandbox Code Playgroud)
如果我像这样运行有例外:
如何解决?谢谢你的帮助
tabs android android-lifecycle android-fragments fragment-tab-host
实际上,我会说iOS ViewControllers和Android Activities都有他们的生命周期方法.对于例的等效ViewController.viewDidLoad()是Activity.onCreate()?
否则,我仍然需要知道对方的等价物:
OnStart()OnRestart()OnResume()OnStop()OnDestroy()OnPause()