【问题标题】:BACK key does not finish activityBACK 键未完成活动
【发布时间】:2019-08-07 08:54:25
【问题描述】:

我正在运行一项服务,该服务会在特定时启动新活动 应用程序已启动。

例如,当我启动短信应用程序时,我的服务会通过以下方式检测到它 检查顶级活动包名称并开始新活动。

但问题是,在开始一项新活动后,当我完成 该活动并按短信应用程序中的“返回”按钮返回 主屏幕,它没有完成我的短信应用程序。

即使屏幕在家(启动器),当我检查顶部活动时 名称,短信应用程序作为顶部活动运行,这意味着短信应用程序是 按 BACK 按钮后未完成。

我使用 Intent.FLAG_ACTIVITY_NEW_TASK 意图标志来开始一个新的 活动和完成()来完成它。有谁知道为什么我的 这种情况下BACK键没有完成短信申请?

谢谢,

777

【问题讨论】:

  • 听起来你做错了。您无法控制启动另一个活动后会发生什么。你不能依赖任何特定的行为。
  • 我不想控制短信应用程序。我只是不明白为什么即使我在主屏幕上,这个短信应用也会成为热门活动。

标签: java android


【解决方案1】:

据我所见,后退按钮将停止当前活动,无论它在做什么。如果您绝对需要完成它,请查看lifecycle of an activity,并可能在 onPause() 和 onStop() 函数中添加一些代码。

【讨论】:

  • 当我按下返回按钮时,短信应用的任务总是被终止。但是,当我在启动短信应用程序后从服务启动新活动时,它仍然是最重要的活动。所以我认为从服务开始一个新的活动在这种情况下会导致我的活动生命周期出现一些问题。而且我无法将一些代码放入 SMS 应用程序的 onPause() 和 onStop() 函数中。
【解决方案2】:

好的,如果它不锻炼.. 尝试覆盖 OnBackPressed 方法 并把finish()放进去..希望这会有所帮助

【讨论】:

    【解决方案3】:

    如果您想在用户通过设备导航返回时完成活动,那么您可以使用此代码,它更有帮助。

        public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
    
            this.finish();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    

    【讨论】:

      【解决方案4】:

      我在我的活动中做了类似的事情:

      @Override
          public void onBackPressed(){
              AlertDialog.Builder alert = new AlertDialog.Builder(ctx);
              alert.setTitle("Wylogowanie i wylaczenie.");
              alert
                  .setMessage("Exit?")
                  .setCancelable(false)
                  .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialog, int which) {
      
                          //DO SOMETHING YOU NEED eg. destroy/close DB, stop services, and move the task to back
                          db.getWritableDatabase(); //getDB
                          db.destroyDB(context); //Destroy it
                          db.close(); //and close
                          stopService(new Intent(getBaseContext(), SVCKeepLogged.class)); //stop some service
                          moveTaskToBack(true); //hide activity (this do not kill it - you can use finish() here)
                          //finish();
                      }               
                  })
                  .setNegativeButton("NOOO!", new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialog, int id) {
                      //Keep app alive.
                          dialog.cancel();
                      }
      
                  });
              AlertDialog alertDialog = alert.create();
              alertDialog.show();
          }
      

      【讨论】:

        【解决方案5】:

        试试这个

        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
        
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        
            // TODO
        }
        
        @Override
        public boolean onOptionItemSelected(MenuItem item){
            if(item.getItemId() == android.R.id.home){
                finish();
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-26
          • 1970-01-01
          相关资源
          最近更新 更多