Android:我的应用程序会被系统破坏吗?

时间:2015-04-01 22:49:54

标签: android

我正在制作音频播放器,我想知道我的应用会在后台销毁吗? 我没有后台服务或任何服务。 当应用程序在后台时,有: 带控件的通知+更改文本。 Runnable接口。 MediaPlayer播放。

那么系统会破坏app吗?还是因为跑步而留下来? 哦,还有广播接收器。

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.auv.als.audiovisual" >

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        tools:replace="android:icon,android:theme" >
        <activity
            android:name=".MusicPlayer"
            android:configChanges="orientation"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".MusicBrowser"
            android:label="@string/title_activity_music_browser"
            android:windowSoftInputMode="stateHidden" >
        </activity>
        <activity
            android:name=".splash"
            android:noHistory="true"
            android:label="@string/title_activity_splash" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

2 个答案:

答案 0 :(得分:4)

应该使用服务让您的应用在后台保持活动状态:

  

要完成此操作,您的Activity应该启动一个服务,其中   上传发生。这允许系统正确地确定您的优先级   过程(认为它比其他不可见的更重要   应用程序)在上传期间,无论是否   原始活动暂停,停止或完成。

由于您只使用活动,我相信系统会像正常Activity一样杀死您的应用程序。

我建议您继续使用Android MediaPlayerService

public class MyService extends Service implements MediaPlayer.OnPreparedListener {
    private static final String ACTION_PLAY = "com.example.action.PLAY";
    MediaPlayer mMediaPlayer = null;

    public int onStartCommand(Intent intent, int flags, int startId) {
        ...
        if (intent.getAction().equals(ACTION_PLAY)) {
            mMediaPlayer = ... // initialize it here
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.prepareAsync(); // prepare async to not block main thread
        }
    }

    /** Called when MediaPlayer is ready */
    public void onPrepared(MediaPlayer player) {
        player.start();
    }
}

来源:http://developer.android.com/guide/topics/media/mediaplayer.html#mpandservices

了解更多

  

流程生命周期

     

Android系统试图将应用程序进程保持为   尽可能长,但最终将需要删除旧进程   当内存不足时。如Activity Lifecycle中所述,该决定   关于哪个删除过程与状态密切相关   用户与它的互动。一般来说,有四种状态a   进程可以基于其中运行的活动,在此处列出   按重要性排序。该系统将杀死不太重要的进程   (最后的)在它采取杀死更重要的进程之前   (第一个)。

     
      
  1. 前台活动(用户当前与之交互的屏幕顶部的活动)被认为是最多的   重要。它的过程只会作为最后的手段被杀死,如果它   使用的内存多于设备上可用的内存。一般来说   指出设备已达到内存分页状态,所以这是   为了保持用户界面的响应所需。

  2.   
  3. 可见活动(对用户可见但不在前台的活动,例如位于前景对话框后面的活动)   被认为是非常重要的,除非那样,否则不会被杀死   需要保持前台活动的正常运行。

  4.   
  5. 后台活动(一项对用户不可见且已暂停的活动)不再重要,因此系统可能   安全地杀死它的进程以回收其他前景或内存的内存   可见的过程。如果其进程需要被杀死,那么用户   导航回活动(使其在屏幕上可见)   再次),它的onCreate(Bundle)方法将被调用   之前提供的savedInstanceState   onSaveInstanceState(Bundle)使它可以在相同的情况下重启   用户最后离开的状态。

  6.   
  7. 空进程是不承载任何活动或其他应用程序组件(例如Service或BroadcastReceiver类)的进程。   当内存变低时,系统会很快杀死它们。对于   这个原因,你在活动之外做的任何后台操作   必须在活动BroadcastReceiver或的上下文中执行   服务以确保系统知道它需要保持您的过程   周围。

  8.         

    有时,Activity可能需要进行长时间运行   独立于活动生命周期本身存在。一个例子可能   是一个相机应用程序,允许您将图片上传到网络   现场。上传可能需要很长时间,应用程序应该   允许用户离开应用程序它将执行。至   实现这一点,你的Activity应该启动一个服务   上传发生。这允许系统正确地确定您的优先级   过程(认为它比其他不可见的更重要   应用程序)在上传期间,无论是否   原始活动暂停,停止或完成。

来源:http://developer.android.com/reference/android/app/Activity.html

答案 1 :(得分:0)

是系统会在用户点击mp3时终止您的应用。您需要处理在您的应用中启动音乐播放的意图,否则系统将终止您的应用。因为一次只有一个应用程序可以控制音频硬件。

How do I make an intent-filter for playing an MP3 file?