我有办法创建一个服务来跟踪我的活动类并在崩溃后重新启动它吗?请注意,我不能使用uncaughthandlers线程方法来重新启动我的应用程序.我的应用程序应该崩溃了,不用担心那部分.我的应用很简单,像这样
private class AudioRenderer extends Activity {
private MediaPlayer AudioRenderer(String filePath) {
File location = new File(filePath);
Uri path = Uri.fromFile(location);
mp= MediaPlayer.create(this, path);
}
return mp
}
一旦崩溃,在后台监听的服务将自动重新启动我的应用程序.有人知道这怎么可能吗?谢谢!
解决方法:
是的,您可以这样做,如下所述.但是,如果这样的技术对实验有意义,那么它们绝对不适合生产.那将是非常丑陋且效率低下的.
这就是说,这是一种方法:
>使您的服务sticky或redelivered确保其在启动一次且未明确停止后始终可以运行.
>在您的Activity类中,静态存储指向其所有正在运行的实例的WeakReferences,并提供一种方法来静态检查当前是否至少分配了其中之一:
public class MyActivity extends Activity {
private static ArrayList<WeakReference<MyActivity >> sMyInstances = new ArrayList<WeakReference<MyActivity >>();
public MyActivity() {
sMyInstances.add(new WeakReference<MyActivity >(this));
}
private static int nbInstances() {
int ret = 0;
final int size = sMyInstances.size();
for (int ctr = 0; ctr < size; ++ctr) {
if (sMyInstances.get(ctr).get() != null) {
ret++;
}
}
return ret;
}
}
(WeakReference是对不阻止这些对象进行垃圾收集的对象的引用,更多详细信息here)
>然后,从您的服务中,不时调用MyActivity.nbInstances().在最后一个运行的MyActivity实例崩溃之后,它将返回0 a(通常很短,但是理论上是不可预测的).警告:除非您有关于此活动或其基础上下文的memory leak,否则它将这样做,因为此泄漏将阻止崩溃的实例的垃圾回收.
>然后,您只需使用startActivity(Intent)从服务中启动活动的新实例