我正在制作音频播放器,我想知道我的应用会在后台销毁吗? 我没有后台服务或任何服务。 当应用程序在后台时,有: 带控件的通知+更改文本。 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>
答案 0 :(得分:4)
要完成此操作,您的Activity应该启动一个服务,其中 上传发生。这允许系统正确地确定您的优先级 过程(认为它比其他不可见的更重要 应用程序)在上传期间,无论是否 原始活动暂停,停止或完成。
由于您只使用活动,我相信系统会像正常Activity
一样杀死您的应用程序。
我建议您继续使用Android MediaPlayer
和Service
:
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 进程可以基于其中运行的活动,在此处列出 按重要性排序。该系统将杀死不太重要的进程 (最后的)在它采取杀死更重要的进程之前 (第一个)。
前台活动(用户当前与之交互的屏幕顶部的活动)被认为是最多的 重要。它的过程只会作为最后的手段被杀死,如果它 使用的内存多于设备上可用的内存。一般来说 指出设备已达到内存分页状态,所以这是 为了保持用户界面的响应所需。
可见活动(对用户可见但不在前台的活动,例如位于前景对话框后面的活动) 被认为是非常重要的,除非那样,否则不会被杀死 需要保持前台活动的正常运行。
后台活动(一项对用户不可见且已暂停的活动)不再重要,因此系统可能 安全地杀死它的进程以回收其他前景或内存的内存 可见的过程。如果其进程需要被杀死,那么用户 导航回活动(使其在屏幕上可见) 再次),它的onCreate(Bundle)方法将被调用 之前提供的savedInstanceState onSaveInstanceState(Bundle)使它可以在相同的情况下重启 用户最后离开的状态。
- 醇>
空进程是不承载任何活动或其他应用程序组件(例如Service或BroadcastReceiver类)的进程。 当内存变低时,系统会很快杀死它们。对于 这个原因,你在活动之外做的任何后台操作 必须在活动BroadcastReceiver或的上下文中执行 服务以确保系统知道它需要保持您的过程 周围。
有时,Activity可能需要进行长时间运行 独立于活动生命周期本身存在。一个例子可能 是一个相机应用程序,允许您将图片上传到网络 现场。上传可能需要很长时间,应用程序应该 允许用户离开应用程序它将执行。至 实现这一点,你的Activity应该启动一个服务 上传发生。这允许系统正确地确定您的优先级 过程(认为它比其他不可见的更重要 应用程序)在上传期间,无论是否 原始活动暂停,停止或完成。
来源:http://developer.android.com/reference/android/app/Activity.html
答案 1 :(得分:0)
是系统会在用户点击mp3时终止您的应用。您需要处理在您的应用中启动音乐播放的意图,否则系统将终止您的应用。因为一次只有一个应用程序可以控制音频硬件。