相关疑难解决方法(0)

退出申请不赞成?

继续我学习Android的尝试,我只是阅读以下内容:

问题:用户是否可以选择终止应用程序,除非我们使用菜单选项来杀死它?如果不存在这样的选项,用户如何终止该应用程序?

答案:(Romain Guy):用户没有,系统会自动处理.这就是活动生命周期(特别是onPause/onStop/onDestroy)的用途.无论你做什么,都不要放"退出"或"退出"应用程序按钮.它与Android的应用程序模型无关.这也与核心应用程序的工作方式相反.

呵呵,我在Android世界中采取的每一步都会遇到某种问题=(

显然,你无法在Android中退出应用程序(但Android系统可以很好地完全破坏你的应用程序).那是怎么回事?我开始认为编写一个充当"普通应用程序"的应用程序是不可能的 - 用户可以在他/她决定这样做时退出应用程序.这不应该依赖操作系统来做.

我尝试创建的应用程序不是Android Market的应用程序.它不是一般公众"广泛使用"的应用程序,它是一个将用于非常狭窄的业务领域的商业应用程序.

我实际上真的很期待为Android平台开发,因为它解决了Windows Mobile和.NET中存在的许多问题.然而,上周对我来说有点懈怠...我希望我不必放弃Android,但它现在看起来不太好=(

有没有办法让我真的退出申请?

android

1131
推荐指数
29
解决办法
27万
查看次数

Activity.finish()如何在Android中运行?

有人可以提供一个Activity调用其finish()方法时会发生什么的描述吗?

它会立即退出,还是完成调用它的函数?

java android

103
推荐指数
3
解决办法
6万
查看次数

完成后继续onCreate流程()

我想从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)

android oncreate

74
推荐指数
2
解决办法
3万
查看次数

在Android中启动新活动并完成当前活动?

目前我正在开始一个新的,Activity并呼吁finish当前的.

是否有任何可以传递给Intent它的标志,可以在Activity不需要finish从代码中手动调用的情况下完成当前的操作?

flags android android-activity start-activity

67
推荐指数
3
解决办法
10万
查看次数

按下后退出Android应用程序

我正在构建一个Android应用程序.按下后退时如何退出Android应用程序.Android版本为2.3.3及以上版本.Android应用程序转到以前我不想要的活动.

android

24
推荐指数
10
解决办法
7万
查看次数

Android:将完成()总是调用onDestroy()?

简单的问题:你能确定finish()会打电话onDestroy()吗?我还没有找到任何确认.

java android ondestroy activity-finish

22
推荐指数
2
解决办法
3万
查看次数

当应用程序的所有活动完成后会发生什么?

场景:

我在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()).

问题:

  1. 通过调用每个活动的finish()完成所有活动将关闭应用程序(其过程)?
  2. 即使所有活动都已完成(已关闭),变量的值如何仍然存在?
  3. 呼叫System.exit(10)Process.killProcess(Process.myPid())退出申请是否公平?

更新:

如何在退出应用程序时清除应用程序常量(BackAnd HomeActivity)?

android process android-activity

16
推荐指数
2
解决办法
2178
查看次数

如何使用Android的架构组件完成ViewModel的活动?

我试图弄清楚如何以最佳方式完成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 android-architecture-components

13
推荐指数
1
解决办法
2766
查看次数

finish()和Activity生命周期

我正在学习一门课程的Android编程,我有一个关于finish()如何适应Activity生命周期的快速问题.

当你调用finish()时,会启动什么生命周期回调?我认为它是onPause(),然后是onStop()和onDestroy().它是否正确?

真的,我只是想确保它不会直接跳到o​​nDestroy().

android activity-lifecycle android-activity

10
推荐指数
2
解决办法
3万
查看次数

当内存不足时,Android不会从堆栈中查杀活动

我们一直在开发一个具有下拉式仪表板的应用程序,该仪表板允许用户在整个应用程序中导航.导航不是很标准,因为几乎每个活动都可以访问此菜单.在使用菜单播放一段时间后,堆栈开始增长和增长.

所有这些活动都包含列表视图,其中包含多个图像视图,每个活动大约需要3mb.如果用户玩得足够并在堆栈上创建了超过25个活动,则会发生以下情况:

  1. 抛出内存不足错误(堆增加直到没有堆).
  2. 由于异常而显示一个对话框(不幸的是,%activity%已停止.)
  3. 抛出异常错误的活动已经完成.
  4. 堆栈中的所有活动都已完成,但历史记录保留,因此可以进行备份,并且每个活动都由操作系统自动重新创建.

我期待系统自动杀死堆栈中最旧的活动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)

android out-of-memory android-activity

8
推荐指数
1
解决办法
3656
查看次数

是否有可能在onDestroy之后调用回调方法?

在我的应用程序的最新版本中,一些用户遇到了我无法重现的崩溃.目前只有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

5
推荐指数
1
解决办法
740
查看次数

finish()完成活动,但仍然在后台

我有一个关于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中,我只需要一个按钮.当我点击按钮时,活动结束,然后我回到设备的主屏幕......但是,当我点击设备的菜单按钮(显示所有应用程序在后台运行)时,我仍然看到我的活动......我不想要那个.我该如何解决?

android activity-finish

5
推荐指数
1
解决办法
1139
查看次数

为什么要在发送 Intent 后调用 finish() 方法?

我刚刚在

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() 方法?它的目的是什么?

java android android-intent

2
推荐指数
1
解决办法
4097
查看次数