继续我学习Android的尝试,我只是阅读以下内容:
问题:用户是否可以选择终止应用程序,除非我们使用菜单选项来杀死它?如果不存在这样的选项,用户如何终止该应用程序?
答案:(Romain Guy):用户没有,系统会自动处理.这就是活动生命周期(特别是onPause/onStop/onDestroy)的用途.无论你做什么,都不要放"退出"或"退出"应用程序按钮.它与Android的应用程序模型无关.这也与核心应用程序的工作方式相反.
呵呵,我在Android世界中采取的每一步都会遇到某种问题=(
显然,你无法在Android中退出应用程序(但Android系统可以很好地完全破坏你的应用程序).那是怎么回事?我开始认为编写一个充当"普通应用程序"的应用程序是不可能的 - 用户可以在他/她决定这样做时退出应用程序.这不应该依赖操作系统来做.
我尝试创建的应用程序不是Android Market的应用程序.它不是一般公众"广泛使用"的应用程序,它是一个将用于非常狭窄的业务领域的商业应用程序.
我实际上真的很期待为Android平台开发,因为它解决了Windows Mobile和.NET中存在的许多问题.然而,上周对我来说有点懈怠...我希望我不必放弃Android,但它现在看起来不太好=(
有没有办法让我真的退出申请?
有人可以提供一个Activity调用其finish()方法时会发生什么的描述吗?
它会立即退出,还是完成调用它的函数?
我想从onCreate方法内部完成一个活动.当我打电话时finish(),onDestroy()没有立即调用,代码不断流过finish().onDestroy()直到onCreate()结束括号后才调用.
根据onCreate()developer.android.com/reference上的说明.
您可以在此函数中调用finish(),在这种情况下,将立即调用onDestroy(),而不执行任何其余的活动生命周期(onStart(),onResume(),onPause()等).
我问的原因是:我想检查传递给Bundle的数据onCreate().当然我可以控制传递的内容onCreate,但我仍然认为应该在交付时进行检查.
我的代码包含class A,它启动Activity B.我认为不应该调用最后两个"if of clause子句"标签,因为语句中的finish方法if应该销毁了活动.它与if子句无关,因为第二次finish()调用后的标记行仍然被读取.
我的代码:
A级
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// goToBButton: when pressed sends message to class B.
Button goToBButton = (Button)this.findViewById(R.id.go_to__b_btn);
goToBButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick (View v) {
Log.i(TAG,"A Class: goToBButton, onClick");
Intent i = new Intent(A.this, B.class);
startActivityForResult(i,REQ_TO_B);
} …Run Code Online (Sandbox Code Playgroud) 目前我正在开始一个新的,Activity并呼吁finish当前的.
是否有任何可以传递给Intent它的标志,可以在Activity不需要finish从代码中手动调用的情况下完成当前的操作?
我正在构建一个Android应用程序.按下后退时如何退出Android应用程序.Android版本为2.3.3及以上版本.Android应用程序转到以前我不想要的活动.
简单的问题:你能确定finish()会打电话onDestroy()吗?我还没有找到任何确认.
我在Android应用程序中有四个活动,比如A,B,C和D. Constants.java应用程序中有一个类可以扩展Application类以维护全局应用程序状态.Constants类包含应用程序的所有常量变量.活动流程是这样的A-->B-->C-->D.当从活动A按下后退按钮时,我正在调用finish()方法,该方法将完成活动A并关闭应用程序.之后,如果我从所有应用程序打开应用程序,则会有一个变量,Constants.java其值在上次启动时仍然存在.当我从活动A(背面按下)开始System.exit(10)跟随时,同样的事情不会发生Process.killProcess(Process.myPid()).
System.exit(10)后Process.killProcess(Process.myPid())退出申请是否公平?如何在退出应用程序时清除应用程序常量(BackAnd HomeActivity)?
我试图弄清楚如何以最佳方式完成ViewModel中的Activity.我找到了使用LiveData对象并发出"信号"的一种方法.
我怀疑这个解决方案有一个开销.那么它是正确的解决方案还是我应该使用更准确?
所以举个例子:让我们假设在一个应用程序中是一个活动MainActivity和视图模型,如下所示:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val model = ViewModelProviders.of(this).get(MainViewModel::class.java)
model.shouldCloseLiveData.observe(this, Observer { finish() })
}
}
Run Code Online (Sandbox Code Playgroud)
并且作为MainActivity的伴侣是MainViewModel,如下所示:
class MainViewModel(app: Application) : AndroidViewModel(app) {
val shouldCloseLiveData = MutableLiveData<Void>()
fun someAction(){
shouldCloseLiveData.postValue(null)
}
}
Run Code Online (Sandbox Code Playgroud) 我正在学习一门课程的Android编程,我有一个关于finish()如何适应Activity生命周期的快速问题.
当你调用finish()时,会启动什么生命周期回调?我认为它是onPause(),然后是onStop()和onDestroy().它是否正确?
真的,我只是想确保它不会直接跳到onDestroy().
我们一直在开发一个具有下拉式仪表板的应用程序,该仪表板允许用户在整个应用程序中导航.导航不是很标准,因为几乎每个活动都可以访问此菜单.在使用菜单播放一段时间后,堆栈开始增长和增长.
所有这些活动都包含列表视图,其中包含多个图像视图,每个活动大约需要3mb.如果用户玩得足够并在堆栈上创建了超过25个活动,则会发生以下情况:
我期待系统自动杀死堆栈中最旧的活动BEFRORE抛出OutOfMemoryError ...
为了确保操作系统不会破坏旧活动,我创建了一个每次分配1mb的测试应用程序.猜猜是什么:行为是一样的,抛出了错误的错误:
问题是:如果需要,我们如何告诉Android操作系统允许释放活动及其资源,以便我们不会得到"不幸的是,您的活动已停止".对话?
概念证明
package com.gaspar.memorytest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MemoryTestActivity extends Activity {
/** Called when the activity is first created. */
private byte[] mData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(MemoryTestActivity.this, MemoryTestActivity.class);
startActivity(i);
}
});
mData = new byte[1*1024*1024];
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序的最新版本中,一些用户遇到了我无法重现的崩溃.目前只有Samsung运行Lollipop的设备存在问题,但这可能只是巧合.在分析了堆栈跟踪和相关代码之后,我认为我可能已经找到了罪魁祸首.为了测试我的假设,我将代码简化为以下代码段:
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button b = new Button(this);
b.setText("Click me!");
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Handler().post(new Runnable() {
@Override
public void run() {
// This is the callback method
Log.d("TAG", "listenerNotified");
}
});
}
});
setContentView(b);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("TAG", "onDestroy");
}
}
Run Code Online (Sandbox Code Playgroud)
每次我通过首先点击Click me按钮然后再按下后退按钮listenerNotified来测试上述应用程序之前,都会打印到控制台onDestroy().
但我不确定我是否可以依赖这种行为.Android对上述场景有任何保证吗?我可以安全地假设我的命令Runnable总是会被执行, …
java multithreading android android-lifecycle android-activity
我有一个关于android studio中活动的finish()方法的问题:
我有这个简单的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
在我的activity_main中,我只需要一个按钮.当我点击按钮时,活动结束,然后我回到设备的主屏幕......但是,当我点击设备的菜单按钮(显示所有应用程序在后台运行)时,我仍然看到我的活动......我不想要那个.我该如何解决?
我刚刚在
Intent wizard = new Intent();
wizard.setClass(this, A.class);
wizard.putExtra("Domain", A.getInstance().B);
startActivity(wizard);
finish();
Run Code Online (Sandbox Code Playgroud)
为什么要在这里调用 finish() 方法?它的目的是什么?