java - 应用程序被重复打开

标签 java android multithreading

我正在开发一个应用程序。当我退出应用程序时,它将再次打开(第一个 Activity 被一次又一次调用)。所以我无法退出。

在其他一些 Activity 中,我使用“退出”按钮和正确的代码来退出。即使当我单击这些 Activity 上的“退出”按钮时,它也会启动登录 Activity 。 (登录页面已打开)

在我的应用程序中,我使用

1) 主要

2) 屏幕 Activity

3) 登录

流程:(从主->screenActivity->登录)

起始页面(第一个 Activity )发布在下面

public class main extends Activity {
static ConnectivityManager conMgr;

BackgroundThread backgroundThread;
TextView myText;
boolean myTextOn = true;
Cursor cursor;
String response="";
public SQLiteAdapter mySQLiteAdapter;

private  SQLiteDatabase sqLiteDatabase;
SimpleCursorAdapter cursorAdapter;

public class BackgroundThread extends Thread {

boolean running = false;



 void setRunning(boolean b){
 running = b;
}

@Override
 public void run() {
 // TODO Auto-generated method stub
 //super.run();
 while(running){
  try {
  sleep(1000);
 } catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
 }
catch(Exception e)
{

}
handler.sendMessage(handler.obtainMessage());
}
}

}

Handler handler = new Handler(){

 @Override
 public void handleMessage(Message msg) {
 // TODO Auto-generated method stub
 //super.handleMessage(msg);
 if (myTextOn){
  myTextOn = false;
  myText.setVisibility(View.GONE);
 }
 else{
  myTextOn = true;
  myText.setVisibility(View.VISIBLE);
 }
}

};



  @Override
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.thread);

   myText = (TextView)findViewById(R.id.mytext);




}



@Override
protected void onStart() {
conMgr =  (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
// TODO Auto-generated method stub
super.onStart();
if(isInternetAvailable())
{
 Toast.makeText(this, "online", Toast.LENGTH_LONG).show();

startActivity(new Intent(main.this, ScreenActivity.class));
}
else{

    startActivity(new Intent(main.this, splashscreen.class));

    Toast.makeText(this, "offline", Toast.LENGTH_LONG).show();

}


 backgroundThread = new BackgroundThread();
 backgroundThread.setRunning(true);
   backgroundThread.start();

}



private boolean isInternetAvailable() {
ConnectivityManager cm=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;

}



@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();

boolean retry = true;
backgroundThread.setRunning(false);

 while(retry){
 try {
 backgroundThread.join();
 retry = false;
} catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
}
catch(Exception e)
{

}

}



}

public void onDEstroy()
{
super.onDestroy();
}
}

屏幕 Activity :

public class ScreenActivity extends Activity implements AnimationListener {
private TextView animatedView3; 
//ImageView image;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash); 



   /* Animation animation1 = AnimationUtils.loadAnimation(this,  
            R.anim.anima);  
    animation1.setAnimationListener(this);  
    View animatedView1 = findViewById(R.id.aet1);  
    animatedView1.startAnimation(animation1);  


    /** set time to splash out */


    final int welcomeScreenDisplay = 9000;
    /** create a thread to show splash up to splash time */
    Thread welcomeThread = new Thread() {

        int wait = 0;

        @Override
        public void run() {
            try {
                super.run();
                /**
                 * use while to get the splash time. Use sleep() to increase
                 * the wait variable for every 100L.
                 */
                while (wait < welcomeScreenDisplay) {
                    sleep(100);
                    wait += 100;
                }
            } catch (Exception e) {
                System.out.println("EXc=" + e);
            } finally {
                /**
                 * Called after splash times up. Do some action after splash
                 * times up. Here we moved to another main activity class
                 */
                startActivity(new Intent(ScreenActivity.this,
                        login.class));

            }
        }
    };
    welcomeThread.start();

}

public void onAnimationStart(Animation animation) {  

}  

public void onAnimationEnd(Animation animation) {  
    //Toast.makeText(this, "Animation ended", Toast.LENGTH_SHORT).show();  
    if (animatedView3.getVisibility() == View.VISIBLE) {  
        animatedView3.setVisibility(View.INVISIBLE);  
    } else {  
        animatedView3.setVisibility(View.VISIBLE);  
    }  
}  

public void onAnimationRepeat(Animation animation) {  
   // Toast.makeText(this, "Animation rep", Toast.LENGTH_SHORT).show();  

}  
}

请问谁能解释一下这个问题以及如何解决它?我没听懂。

最佳答案

finish() 放在您的 loginActivity 中,对于其他 Activities 以及其他堆栈将存储访问过的Activities<的列表.

关于java - 应用程序被重复打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14435744/

相关文章:

java将所有sql记录到oracle

java - GraalVM 反射配置中的 Lambda 表达式类

android - 如何在某种情况下跳过第一个 Activity

java - Java中一个对象可以创建多个线程吗

multithreading - 如何计算多线程进程的总计算时间

java - 如何在 Netbeans 中使用 JSF 1.2 和 JPA?

java - 在使用 PreparedStatement 的同时使用 RabbitMQ 设计 Java OSGi 应用程序

android - 为 crouton 库使用自定义布局

android - 错误 : undefined reference in JNI function After upgrading NDK and Cmake for Android Studio

c++ - std::cin.putback() 和 "wake up"它