【问题标题】:Performing stop of activity that is not resumed?执行停止未恢复的活动?
【发布时间】:2014-12-04 05:01:10
【问题描述】:

我正在制作一个简单的 Android 应用程序,只是为了熟悉这个概念。我有一个包含两个活动的应用程序,第一个应该只是显示一秒钟的启动屏幕,第二个是带有黑色方块的画布,当您单击它时会变成青色。当我运行它时,它会停止并在日志中显示“执行停止未恢复的活动”的错误。

主要活动:

package com.example.test;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try{
        Thread.sleep(1000);
        }catch(Exception e){}
        Intent in = new Intent(this, Afspl.class);
        startActivity(in);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

下一个活动:

package com.example.test;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class Afspl extends Activity {

    public DrawView vi;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        vi = new DrawView(this);
    }

    class DrawView extends View{
        Paint paint = new Paint();

        public DrawView(Context context){
            super(context);
        }

        public void onDraw(Canvas c){
            paint.setColor(col);
            c.drawRect(40, 40, 200, 200, paint);

        }

        private int col = Color.BLACK;

        public void setToColor(int c){
            col=c;
        }
    }

    public boolean onTouchEvent(MotionEvent me){
        if(me.getX()>=30 &&  me.getX() <= 320 && me.getY() >=30 && me.getY() <= 320)vi.setToColor(Color.CYAN);
        return super.onTouchEvent(me);
    }


}

你知道我为什么会收到这个错误,或者它意味着什么,或者我该如何解决这个问题?感谢所有帮助。

【问题讨论】:

  • 您的线程在尝试停止时处于睡眠状态(因为您在等待时调用了 startActivity)。您正试图阻止它,但它当前未处于恢复状态。
  • 如果我使用 Handler 将 run 函数放入可运行类中,我如何引用 Handler 所在的 MainActivity 类,因为 'this' 将引用可运行类?
  • 如果您正在学习,请转换您的方法,不要做启动画面。他们是反安卓的,用户讨厌他们。您希望在网页上看到启动画面吗?当你点击一个网页时会发生什么,他们会向你展示你必须通过的广告对话框,然后才能使用该页面?是不是很烂?
  • 我想确保我了解如何在活动之间切换,对于我正在制作的应用程序,这似乎是个好主意。

标签: java android android-activity


【解决方案1】:

打算使用:

try{
    Thread.sleep(1000);
}catch(Exception e){}
Intent in = new Intent(this, Afspl.class);
startActivity(in);

你可以试试新的

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent in = new Intent(getApplicationContext(), Afspl.class);
                startActivity(in);
            }
}, 1000);

你不应该让主线程进入睡眠状态。如果您想在将来做某事,请使用 HandlerRunnable

此外,您应该在两个活动上声明一个视图,而不仅仅是第一个。创建一个视图并在您的第二个活动中使用“setContentView()”对其进行设置。

【讨论】:

  • 像这样,Intent 构造函数中的'this' 将是runnable 而不是MainActivity。如何改为引用 MainActivity?
  • @user2649681 不要使用这个,而是使用 MainActivity.this
  • @user2649681 这将是 MainActivity,而不是 Runnable。你试过代码了吗?
  • 现在应用程序可以在没有错误的情况下启动,但我只是得到一个空白的灰色屏幕,这是我对主要活动的期望,但其他活动永远不会加载,我失败了在日志中设置 egl_swap_behavior。你知道那是什么吗?
  • @Storo Intent 不将 Runnable 作为参数。
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2014-05-02
相关资源
最近更新 更多