我是Android开发的新手,我需要一些帮助来保存活动的状态.从onPause保存实例并从onRestore恢复实例的正确方法是什么,因为很明显Android并没有像onCreate或onSaveInstanceState那样发送savedInstanceState Bundle.或者除了使用savedInstanceState包之外还有更好的方法来保存吗?
这有意义吗?
[编辑]好吧,我想我知道我的真正问题是什么......但首先,我认为我所寻找的是使用SharedPreferences而不是savedInstanceState.
所以,做更多的调试日志观察我注意到,不是将Activity带到堆栈顶部而是创建一个新的.是的,我意识到我正在创造一个新的....
Intent itemintent = new Intent(MediaList.this, AudioPlayer.class);
Bundle b = new Bundle();
//...putString some strings to send
itemintent.putExtra("android.intent.extra.INTENT", b);
itemintent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(itemintent,0);
Run Code Online (Sandbox Code Playgroud)
...但FLAG_ACTIVITY_REORDER_TO_FRONT不应该阻止它创建新活动吗?我猜它认为它必须创建一个新的,因为我发送一些字符串?
更好的是,我怎样才能检查活动是否已经在堆栈中并切换到它,只要字符串是相同的? - 当用户从列表视图中单击媒体项时,我正在启动此活动.[/编辑]
我有个问题.初始化相机进行预览并将另一个应用程序聚焦后,然后返回我的应用程序:预览显示为黑色.如果我继续拍照,则会拍摄我正常指向相机的位置.
我在OnResume()覆盖上做错了吗?相关代码如下:
public void ReleaseCamera()
{
if (myCamera != null)
{
myCamera.Release();
myCamera = null;
}
}
protected override void OnPause()
{
base.OnPause();
if (myButtonState == ButtonState.CameraActive)
ReleaseCamera();
}
protected override void OnResume()
{
base.OnResume();
if (myButtonState == ButtonState.CameraActive)
InitializeCamera();
}
private void InitializeCamera()
{
SurfaceView mySurfaceView = FindViewById<SurfaceView>(Resource.Id.surfaceView1);
myCamera = Android.Hardware.Camera.Open(cameraNumber);
Android.Hardware.Camera.Parameters p = myCamera.GetParameters();
myCamera.SetDisplayOrientation(90); // Portrait
myCamera.SetPreviewDisplay(mySurfaceView.Holder);
myCamera.StartPreview();
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.:)
我正在寻找一种方法,在两个gradle任务的调用之间插入几秒的暂停.
我可以用
firstTask.doLast {
.....
}
Run Code Online (Sandbox Code Playgroud)
类似于Linux/Unix的东西
sleep 45
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在使用TextureView在ListView中播放视频.TextureView本身运行完美,但是,如果我按下主页按钮并重新输入应用程序几次,TextureView会变黑(尽管音频继续播放).如果我退出并再次重新进入,TextureView将变为白色(或者可能是透明的,因为白色是我背景的颜色).
这是我的代码:
holder.instagramTextureView
.setSurfaceTextureListener(new SurfaceTextureListener() {
@Override
public void onSurfaceTextureUpdated(
SurfaceTexture surface) {
// TODO Auto-generated method stub
}
@Override
public void onSurfaceTextureSizeChanged(
SurfaceTexture surface, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public boolean onSurfaceTextureDestroyed(
SurfaceTexture surface) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onSurfaceTextureAvailable(
SurfaceTexture surface, int width, int height) {
final Surface s = new Surface(surface);
try {
holder.mMediaPlayer = new MediaPlayer();
holder.mMediaPlayer.setDataSource(post
.getMedias().get(0)
.getMediaUrlVideomp4StandardRes());
holder.mMediaPlayer.setSurface(s);
holder.mMediaPlayer.prepare();
holder.instagramVideoVolume …Run Code Online (Sandbox Code Playgroud) android android-listview onpause android-mediaplayer textureview
我试图用KEYCODE_BACK调用我的主要活动的onKeyDown(),这样它就像我自己按下"后退"按钮一样.我使用以下代码执行此操作:
KeyEvent goBackDown = new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK,0,0);
goBackDown.dispatch(activity);
SystemClock.sleep(50); // as if human pressed the key
KeyEvent goBackUp = new KeyEvent(0,0,KeyEvent.ACTION_UP,KeyEvent.KEYCODE_BACK,0,0);
goBackUp.dispatch(activity);
Run Code Online (Sandbox Code Playgroud)
我的活动的onKeyDown()目前只调用:
return super.onKeyDown(keyCode, event);
Run Code Online (Sandbox Code Playgroud)
然而,与真正的 Back按钮不同,当调用"假"代码时,活动拒绝变得不可见.
为什么?
关于onSaveInstanceState()州的文件:
如果调用该方法,则始终在onStop()之前调用它,并且可能在onPause()之前调用它.
但是,我始终注意到日志消息onPause()之前总是被调用onSaveInstanceState().我把日志消息放在这两种方法中.请帮助我了解onSaveInstanceState()之前的调用情况onPause().
环境:Android v4.0(API 14)+ Eclipse v3.7.1 - Indigo.
通过该文档,在以下情况下调用"onPause":
当系统即将开始恢复先前的活动时.
与"onStop"相比,不同之处在于:
当活动不再对用户可见时调用,因为另一个活动已恢复并且正在覆盖此活动.
但是,当我长按HW-Home键并显示"最近的应用程序"时,不会调用"onPause".
此时,我无法与原始活动进行交互,但仍然可见.
我很困惑这种情况.请帮忙解释一下.
非常感谢你.BR,亨利
我有一个关于在屏幕中央出现窗口/暂停菜单时暂停/冻结游戏的问题。我已经创建了一个暂停屏幕类,每次按下后退键时都会调用该类。
我的问题是我不知道如何冻结或暂停游戏,这成为一个问题,因为每当我尝试单击暂停窗口的外部时,玩家就可以四处移动。
在我的应用程序的一部分中,我向用户显示ListView.当用户按下列表中的项目时,DialogFragment显示a.
@Override
public void onClick() {
android.support.v4.app.FragmentTransaction ft = getFragment().getFragmentManager().beginTransaction();
ft.addToBackStack(null);
SingleSettingDialogFragment dialog = SingleSettingDialogFragment.newInstance(...);
dialog.show(ft, "Single");
}
Run Code Online (Sandbox Code Playgroud)
DialogFragment具有以下结构:
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceSate);
AlertDialog dialog = new AlertDialog.Builder(...)
...
.create();
...
return dialog;
}
Run Code Online (Sandbox Code Playgroud)
当用户退出DialogFragment时,我希望onResume()调用调用片段的方法,但事实并非如此.
那么DialogFragments有什么特别之处呢?为什么在显示对话框时暂停调用Fragment?它怎么能实现?
我没有在文档中找到任何对此行为的引用,因此引用是一个加号.
当第一个活动暂停时,我开始第二个活动。
FirstActivity.java
@Override
public void onPause(){
super.onPause();
startActivity(new Intent(this, SecondActivity.class));
}
Run Code Online (Sandbox Code Playgroud)
当我按下主屏幕按钮时,SecondActivity 将启动,但会有延迟。在这段延迟中,有足够的时间打开新应用程序(例如Messenger)。但是,当我打开一个新应用程序时,SecondActivity 将不再启动(它甚至不会调用 SecondActivity 的 onCreate 方法)。
即使我打开一个新应用程序,如何仍然启动 SecondActivity?