崩溃后如何自动重新启动活动?

我有办法创建一个服务来跟踪我的活动类并在崩溃后重新启动它吗?请注意,我不能使用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


}

一旦崩溃,在后台监听的服务将自动重新启动我的应用程序.有人知道这怎么可能吗?谢谢!

解决方法:

是的,您可以这样做,如下所述.但是,如果这样的技术对实验有意义,那么它们绝对不适合生产.那将是非常丑陋且效率低下的.

这就是说,这是一种方法:

>使您的服务stickyredelivered确保其在启动一次且未明确停止后始终可以运行.
>在您的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)从服务中启动活动的新实例

上一篇:python – Django:如何重新启动webserver以便应用源代码中的更改


下一篇:MySQL5.7没有初始密码解决办法