我一直在尝试实现一个需要在表面上进行相机预览的应用程序.在我看到事物时,活动和表面生命周期都包含以下状态:
onResume()->onSurfaceCreated()->onSurfaceChanged()onPause()->onSurfaceDestroyed()在此方案中,我可以像打开/释放相机相应的调用和启动/停止在预览onPause/onResume和onSurfaceCreated()/onSurfaceDestroyed().
它工作正常,除非我锁定屏幕.当我启动应用程序时,然后锁定屏幕并在以后解锁它我看到:
onPause()- 屏幕锁定后没有别的 - 然后onResume()解锁后 - 之后没有表面回调.实际上,onResume()在按下电源按钮并且屏幕打开后调用,但是锁定屏幕仍然处于活动状态,因此,在活动变得均匀可见之前.
通过这种方案,我在解锁后得到一个黑屏,并且没有调用表面回调.
这是一个代码片段,不涉及相机的实际工作,而是SurfaceHolder回调.即使在我的手机上使用此代码,也会重现上述问题(按"后退"按钮时会以正常顺序调用回调,但在锁定屏幕时会丢失):
class Preview extends SurfaceView implements SurfaceHolder.Callback {
private static final String tag= "Preview";
public Preview(Context context) {
super(context);
Log.d(tag, "Preview()");
SurfaceHolder holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
Log.d(tag, "surfaceCreated");
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.d(tag, "surfaceDestroyed");
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { …Run Code Online (Sandbox Code Playgroud) 我想编程我的Android应用程序来刷新它在ButtonClick上的当前活动.我在活动布局的顶部有一个按钮可以完成这项工作.当我点击按钮时,当前活动应该重新加载 - 就像设备重启一样.
谢谢
我知道这可能非常简单,但我无法弄清楚.
我正在尝试在操作后重新加载/重新创建活动.我知道我可以使用:
Intent intent = getIntent();
finish();
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
但是在阅读网站上的答案时,我被告知在11 api之后使用'recreate()'.任何帮助将不胜感激,谢谢!
我或多或少是android编程的初学者
我的问题来自这篇文章.
据我所知,主要有两种方法可以重新启动我所在的同一个Activity:
a)Activity.recreate()[在API 11之后添加]
b)
Intent intent = getIntent();
finish();
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
这两个实际上如何工作?他们重新创建活动的过程有什么不同吗?
我相信这两个重新创建活动的方式之间肯定会有一些区别,因为我已经看到recreate()在我的活动中为视图添加了一些默认(垃圾?)值.此外,recreate()使用默认的黑色初始视图启动新活动
在我正在编写的应用程序中,有一部分可以让您更改窗帘设置.问题是,在重新创建活动之前,此设置不会生效.有没有办法告诉应用程序使用onResume()方法重新启动(希望允许它保存onSaveInstanceState()中的所有内容)?
对于我正在开发的应用程序,我想使用intent重新启动当前活动.所以我在MainActivity.class中,我想使用以下内容重新启动MainActivity.class:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
Run Code Online (Sandbox Code Playgroud)
这会调用onDestroy()但不会重新启动活动.为什么这不起作用?