应用程序自行打开

时间:2014-08-05 00:29:51

标签: android

我目前正在开发一款Android应用,但我遇到了以下问题:每次关闭应用或崩溃时,几秒钟后,它会再次打开,全部自动完成。

我已经缩小了PlanItApp类的问题,它继承自Application。所有登录过程都在该类中完成,当它完成时,我从同一个类中调用de Main活动。这是令人不安的部分(这是一个内部类在PlanItApp内部,它用于从服务器检索数据):

public class BaseAsyncDataRetriever extends AsyncTask<PlanItApp, Void, Void>
{

    @Override
    protected Void doInBackground(PlanItApp... params) {
        setContacts();
        PlanItApp app = params[0];
        final CountDownLatch latch = new CountDownLatch(1);
        Thread t1 = new Thread(new Runnable() {

            @Override
            public void run() {
                invitedEventsAux = toLinkedList(PlanItApp.client.getUserInvitedEvents(PlanItApp.PIiD)); 
                latch.countDown();
            }
        });

        });
        t1.start();
        try {latch.await();
        } catch (InterruptedException e) {e.printStackTrace();}
        return null;
    }

    @Override
    protected void onPostExecute() {
        super.onPostExecute();
        Intent i = new Intent(getApplicationContext(), Main.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);           
    }   
}

而且,如果我注释掉 startActivity(i); 该应用程序不会自行打开。即使调用onPostExecute()并打开Main活动,如果我之后关闭应用程序,它将在几秒钟后自行打开。

由于我完全不知道问题可能是什么,我不知道其他一些代码可能是相关的。任何见解都可能有用。

2 个答案:

答案 0 :(得分:3)

完成doInBackground的执行,然后进入最终调用onPostExecute的{​​{1}}。关闭应用程序并不会改变任何内容,一旦后台线程完成,startActivity会自动被调用。

在我的脑海中,尝试保留一个全局布尔值以便在onPostExecute中成功运行,并且只有在它设置的情况下才调用startActivity,当然必须在doInBackgroundonPause()中取消设置{1}}。

但可能有更好的解决方案。

更新:你真的需要新的线程吗?您知道,onStop()会自动为您创建一个新的AsyncTask,因此您在Thread中所做的一切都已经在该主题上。

如果您需要在doInBackground()内设置新的Thread,正确的方法是等待它完成并为该线程调用doInBackground()

以下是example

答案 1 :(得分:0)

我终于找到了解决方案。问题是,在PlanIt类的onCreate()方法中,我调用了异步类,最终将启动Main活动。问题是,当应用程序关闭时,操作系统将重新打开它(这发生在每个其他进程中)并再次调用onCreate()方法,然后重新打开应用程序。这就是为什么有一个启动器类的原因。

解决方案是将活动实例化逻辑移动到启动器类,只有在用户打开它时,每次关闭应用程序时都不会调用它。