【问题标题】:How to make a single instance application in android?如何在android中制作单实例应用程序?
【发布时间】:2012-10-05 12:38:29
【问题描述】:

我是 android 新手,对此我有疑问。

如何在 android 中制作单个应用程序? 我用谷歌搜索了它,我得到了解决它的方法是将launchMode设置为singleTask或singleInstance,我当然尝试过,但没有得到预期的解决方案。

其实我有一个 MP3 播放器应用,然后运行它:

按主页按钮->按住主页按钮->选择我的应用程序->恢复正常。

但是当它启动时:

按返回按钮->按住主页按钮->选择我的应用程序->恢复不正常。我的意思是 android 创建了我的应用程序的一个新实例,你知道,2 个应用程序一起运行,但我不希望这样。

我尝试将启动模式设置为 singleTask。它在第一个活动(我设置为 singleTask)中工作正常,但是当我按下屏幕上的一个按钮来引用新活动(我没有设置为 sigleTask)时,它不能正常工作。

我的应用程序有很多活动,所以我认为将启动模式设置为 singleTask 或 singleInstane 完全不好。

期待您的回答。

谢谢。 @@:如果有任何英语语法错误非常抱歉(我英语不好)。

更新:

我已经解决了这个问题,但现在我怀疑我的模拟器。 正如您之前提到的,按下后退按钮将破坏应用程序(调用 finish() 方法),因此我的应用程序所拥有的所有环境都将被释放。但是当我按下后退按钮时,我的应用程序可能仍在运行,因为我仍然听到正在播放的歌曲。?

我的代码:

public class MainActivity extends Activity {

MediaPlayer mp;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mp = new MediaPlayer();
    playSong("sdcard/Music/lung ta lung tung.MP3");
}


public void playSong(String str)
{
    try {
        mp.setDataSource(str);
        mp.prepareAsync();
        mp.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer arg0) {

                mp.start();
            }
        });
    } catch (IllegalArgumentException e) {

        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

【问题讨论】:

  • 在 Android 中,后退按钮会终止应用程序(调用 finish();),因此预计应用程序不会恢复,而是创建一个新应用程序。
  • 您应该阅读developer.android.com/training/basics/activity-lifecycle/… 以获得更好的理解。
  • 我刚刚有一个想法是重写 onBackPressed() 方法,但我不知道当按下返回按钮时如何做出行为,比如按下主页按钮?

标签: android


【解决方案1】:

通常,android 的方法是操作系统正在处理应用程序。

当您在 Android 应用程序中按下后退按钮时,代码可能会也可能不会处理该按下。

在您描述的场景中,后退按钮可能是在代码中处理的,当它按下时,应用程序会调用“finish();”在活动上。 例如:

@Override
 public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
       //this will finish the activity
       finish(); 
       //this will act as the home button (Use only one of them)
       //moveTaskToBack(true); 
       return true;
    }
 }

当您按下主页按钮时,代码可能会处理一个事件(onPause)。 在某些情况下,您想在有人按下主页按钮时终止应用程序,而在某些情况下您想做其他事情(例如,只需将 Activity 移至后台)。

正如 cmets 中所述,您确实应该阅读有关应用程序生命周期的信息 Managing the Activity Lifecycle

【讨论】:

    【解决方案2】:

    您可以通过将任务移动到后台来将返回按钮设为主页

    @Override
    public void onBackPressed() {
    
        moveTaskToBack(true);
    
    }
    

    【讨论】:

    • 哦,我做了,但请检查我的问题,我刚刚更新。
    • 现在你已经覆盖了后退按钮,所以你的应用程序还没有完成,这就是你在后台听歌的原因,就像按下 Home 键一样。
    • 不,我没有覆盖后退按钮。
    • 如果你使用了onBackpressed(),那么你已经覆盖了返回键。如果您还没有使用该方法,那么您如何将任务移至后台?
    • 为了确保它调用了 finish() 方法,我重写了 onBackButton 并手动调用了 finish()。
    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多