服务停止的原因

时间:2014-01-28 10:41:06

标签: android audio android-service

我正在创建服务以在我的应用中播放声音。当应用程序以启动画面启动然后主菜单活动开始时音频启动。主菜单活动有4个按钮。我没有停止我的服务点击任何按钮(你可以在我的代码中看到),但当我在我的设备上运行我的应用程序时,点击任何按钮服务停止,当我从下一个活动回到这个。声音再次开始。我想在应用程序的最后一个活动上完成服务声音。

主菜单活动代码 -

private Button hist, typ, ben, exit;
    Intent i, objIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        addListenerOnButton();
    }

    public void addListenerOnButton()
    {
        hist = (Button) findViewById(R.id.hist);
        hist.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                startActivity(new Intent(MainActivity.this, History.class));
                finish();
            }
        });

        typ = (Button) findViewById(R.id.typ);
        typ.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                startActivity(new Intent(MainActivity.this, Types.class));  
                finish();        
            }
        });

        ben = (Button) findViewById(R.id.ben);
        ben.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                startActivity(new Intent(MainActivity.this, Benefits.class));  
                finish();               
            }
        });

        exit = (Button) findViewById(R.id.exit);
        exit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                startActivity(new Intent(MainActivity.this, EndSplash.class));
                finish();
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        objIntent = new Intent(MainActivity.this, PlayAudio.class);
        stopService(objIntent);
    }

    @Override 
    public void onBackPressed() {
        super.onBackPressed();
        objIntent = new Intent(MainActivity.this, PlayAudio.class);
        stopService(objIntent);         
    } 

    @Override 
    public void onResume()
    {
        super.onResume();
        objIntent = new Intent(MainActivity.this, PlayAudio.class);
        startService(objIntent);
    }
}

SplashScreen活动 -

TimerTask task;
    Intent objIntent, intent;
    Handler handler; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.splash);
       UtilClass.playing = true;
       objIntent = new Intent(SplashScreen.this, PlayAudio.class);
       startService(objIntent);
       new Handler().postDelayed(csRunnable2, 5000);  
       }

   Runnable csRunnable2 = new Runnable() 
    {      
       @Override
       public void run() 
       {
            intent = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(intent);
            finish();
       }
   };

   public void onBackPressed()  
    {    
      //  myHandler.removeCallbacks(myRunnable);
        objIntent = new Intent(this, PlayAudio.class);
        stopService(objIntent);
        finish();
        return;  
    }  

   @Override
    protected void onPause() {
        super.onPause();
        objIntent = new Intent(this, PlayAudio.class);
        stopService(objIntent);
    }
}

2 个答案:

答案 0 :(得分:1)

每当您导航到另一个活动时,系统会调用您当前的活动onPause,并且您已经在onPause方法中停止了该服务。

您还需要在onPause方法中注释停止服务的代码:

@Override
protected void onPause() {
    super.onPause();
    //objIntent = new Intent(MainActivity.this, PlayAudio.class);
    //stopService(objIntent);
}

您也可以发布服务代码以获得更合适的答案,谢谢。

答案 1 :(得分:0)

请检查活动生命周期http://developer.android.com/training/basics/activity-lifecycle/index.html

当您从一个活动转移到另一个活动时,Onpause()和onResume()将会调用。在你的代码中你在Onpause()和onResume()中的启动和停止服务。