如何正确关闭Android应用程序?

时间:2014-02-03 04:27:31

标签: java android android-intent

我有一个应用程序,它有2个按钮,保存并退出。保存按钮插入sqlite并重置所有EditText和listview,退出按钮关闭我的android应用程序。这是我的保存按钮代码:

 btnsaveto = (Button) findViewById(R.id.btnsaveto);
      btnsaveto.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
        //do insert into sqlite
        Globals.mylist.clear();//my listview
        Globals.outletname=null;//my Editext
        Globals.outletid=0;//my Editext
        Globals.notes=null;//my Editext
        Intent intent = getIntent();
        finish();
        startActivity(intent);
    }
     });

这是我的退出按钮的代码:

btnexit = (Button) findViewById(R.id.btnexit);
      btnexit.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
            finish();
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            }
        } );

这是我的oncreate活动:

  super.onCreate(savedInstanceState);
      setContentView(R.layout.entry_to);
      txtoutlet = (TextView) findViewById(R.id.txtoutlet);
      dataSource = new DBDataSource(this);
      dataSource.open();
      Bundle bun = EntryTO.this.getIntent().getExtras();
          try{
      if (Globals.mylist == null){Globals.mylist = new ArrayList<HashMap<String, String>>();}
            id = bun.getLong("id");
            Id=String.valueOf(id);
            description = bun.getString("description");
            qty = bun.getString("qty");
            if(bun.getString("outletname")!=null){
            Globals.outletid = bun.getLong("outletid");
            Globals.outletname = bun.getString("outletname");  
            }
          map1 = new HashMap<String, String>();
          if(Globals.mylist.size() == 0){
              if(Id!=null && description!=null && Globals.outletname!=null){
              map1.put("one", Id);
              map1.put("two", description);
              map1.put("three", qty);
              Globals.mylist.add(map1);
              txtoutlet.setText(Globals.outletname);
              }else{
              txtoutlet.setText(Globals.outletname);  
              }
          }else{
          int j=Globals.mylist.size();
          if(Id!=null && description!=null && Globals.outletname!=null){
          map1.put("one", Id);
          map1.put("two", description);
          map1.put("three", qty);
          Globals.mylist.add(j,map1);
          txtoutlet.setText(Globals.outletname);
          }else{
              txtoutlet.setText(Globals.outletname);
              } 
          }
            try {
                adapter = new CustomAdapter(EntryTO.this, Globals.mylist, R.layout.item_to,
                          new String[] {"two", "three"},
                          new int[] {R.id.edtbrandto,R.id.edtqtyto });
                setListAdapter(adapter);

            }catch (Exception e) {}
      }catch(NullPointerException e){}
      btnsaveto = (Button) findViewById(R.id.btnsaveto);
      btnsaveto.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
        try{
        String orderid=orderid();
        String orderdate=orderdate();
        String notes = Globals.notes;
        String image = photoToBase64String() ;
        long outletid = Globals.outletid;
        order = dataSource.createorder(orderid, orderdate, notes, image , outletid);
        for(int i=0;i<=Globals.mylist.size()-1;i++){
            map1=Globals.mylist.get(i);
            String Id = map1.get("one");
            String qty = map1.get("three");
        orderdtl = dataSource.createorderdtl(orderid, Id, qty);
        Toast.makeText(EntryTO.this, "Mengisi Data Ke-"+i+", tunggu sebentar..\n" ,Toast.LENGTH_LONG).show();
        }
        Globals.mylist.clear();
        Globals.outletname=null;
        Globals.outletid=0;
        Globals.mPath=null;
        Globals.notes=null;
        Intent intent = getIntent();
        finish();
        startActivity(intent);
        }catch(NullPointerException e){
            }
        }
     });

问题是当我重新打开我的应用程序时,EditText和ListView仍然填充。我重置意图时有什么问题,或者我没有正确关闭应用程序。

注意:我有3个Activity,并且我在Globals.java上声明了我的所有变量,以便在我获得其他活动的其他值时保留我的值。

5 个答案:

答案 0 :(得分:1)

您无法关闭您的申请。 android不允许这样。你可以调用你的应用程序将在后台返回的家庭意图。

答案 1 :(得分:1)

如果您的应用程序只包含一个活动,那么您应该考虑使用finish()方法或super.onBackPressed()。

如果您的应用程序有多个活动,并且假设您有登录页面或启动活动(无论哪个是启动应用程序的第一个活动),请将其称为A,然后调用 acitivty A使用FLAG_CLEAR_TOP并通过bundle传递一些值,并在A中检查是否要退出app,如果是,则完成该活动。

答案 2 :(得分:0)

试试这个......

finish();
System.exit(0);

答案 3 :(得分:0)

您可以维护以下活动堆栈:

  1. 在创建新活动时推送
  2. 销毁时弹出活动
  3. 当您需要关闭应用程序时,可以对堆栈中的每个活动调用finish()。

答案 4 :(得分:0)

您只需使用以下代码退出最近的代码即可。

活动android:name =“。AppName”android:excludeFromRecents =“true”