我遇到了一个非常奇怪的情况......(对我来说)
例如,2个对象,
1是一个名为isInPage的活动成员boolean,
2是一个名为bmpPhoto的静态位图对象。
当我进入我自己的名为 FacebookShareActivity 的
活动时,isInPage 将为
真,直到我退出此活动,
bmpPhoto 将获得一张图片。
在 onCreare() 和 onResume() 之后,没有任何代码在运行,直到用户单击某个 GUI。
我所做的是通过按下硬件电源按钮关闭屏幕,然后等待 5 或 10 分钟。
好的,现在我再次按 porwe 唤醒手机,解锁屏幕,
我的 FacebookShareActivity 回到前面。
然后我单击我的 GUI 按钮以通过 Logcat 检查变量值,它说:
isInPage=false; 而且我忘记了 bmpPhoto 的值,但在我的 GUI 上,照片刚刚消失,
不再显示......
这是怎么回事?
在我这样做之后,它并不是每次都发生......
如果我覆盖 onSaveInstanceState(Bundle savedInstanceState) 和
onRestoreInstanceState(Bundle savedInstanceState) 怎么办?
会有帮助吗?
那么位图对象呢?
仍然不知道这是怎么发生的......
我错过了什么吗?
我真的很需要你们的帮助,请大家帮忙~
以下是我的代码的一部分,很长......从桌面返回时,“isPageRunning”和“bmp”有时会发生变化,但并非每次都发生变化。
public class FacebookShareActivity extends Activity
{
private Bundle b=null;
private Bitmap bmp=null;
private boolean isFacebookWorking=false;
private boolean isPageRunning=true; //This value sometime changed when back from desktop, but not every time
protected void onCreate(Bundle savedInstanceState)
{
Log.i(Constants.TAG, "ON Facebook Share create......");
super.onCreate(savedInstanceState);
setContentView(R.layout.facebook_share);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
private void initUI()
{
btnBack=(Button)findViewById(R.id.btnBack);
btnBack.setOnClickListener(new ButtonClickHandler());
formImage=(RelativeLayout)findViewById(R.id.form_image);
formImage.setDrawingCacheEnabled(true);
btnShare=(Button)findViewById(R.id.btnShare);
btnShare.setOnClickListener(new ButtonClickHandler());
txtIntroText=(TextView)findViewById(R.id.txtIntroText);
txtIntroText.setOnClickListener(new ButtonClickHandler());
txtIntroText.setText(getUploadInImageText());
photo=(ImageView)findViewById(R.id.photo);
bmp=Constants.PROFILE.getName().getPhoto();
if(bmp!=null)
{photo.setImageBitmap(bmp);} //bmp wouldn't be null, it filled by some other activity before
}
@Override
protected void onResume()
{
super.onResume();
Log.i(Constants.TAG, "Trying to set UI on resume...");
b=getIntent().getExtras();
// ...
// ... Get some String value passed from prev activity
facebook=new Facebook("123456789012345"); //Test
asyncFacebook=new AsyncFacebookRunner(facebook);
initUI();
System.gc();
}
@Override
public void onBackPressed()
{
Log.d(Constants.TAG, "Activity receive back key...");
lockButtons(false);
return;
}
private void lockButtons(boolean b)
{
if(isPageRunning)
{
btnBack.setClickable(!b);
btnShare.setClickable(!b);
}
}
private class DelayReleaseKey implements Runnable
{
public void run()
{
try{Thread.sleep(10000);}
catch(InterruptedException ie){}
handler.sendEmptyMessage(0);
}
}
private class ButtonClickHandler implements OnClickListener
{
public void onClick(View v)
{
if(v==btnBack)
{
if(isFacebookWorking)
{ShowAlertDialog(Constants.MESSAGE_FACEBOOK_WORK);}
else
{
lockButtons(true);
formImage=null;
photo=null;
b=null;
facebook=null;
isPageRunning=false;
Intent intent=new Intent(FacebookShareActivity.this, PracticeListActivity.class);
startActivity(intent);
FacebookShareActivity.this.finish();
overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
}
}
if(v==btnShare)
{
lockButtons(true);
facebookLogin();
}
}
}
}
现在我知道我必须重写 onSaveInstanceState、onRestoreInstanceState。他们可以帮助我保存 String、int、boolean 等变量... Bitmap 呢?如果我的变量是静态的怎么办?