私は非常に奇妙な状況に陥りました...(私にとって)
たとえば、2 つのオブジェクト、
1 は isInPage と呼ばれるアクティビティ メンバー ブール値、
2 は bmpPhoto と呼ばれる静的ビットマップ オブジェクトです。
FacebookShareActivity isInPage という自分のアクティビティに入る
と、このアクティビティを終了するまで true になり、
bmpPhoto に画像が与えられます。
onCreare() と onResume() の後、ユーザーが GUI をクリックするまで、実行中のコードはありません。
私がしたことは、ハードウェアの電源ボタンを押して画面を閉じ、おそらく5分または10分待ちました.
OK、もう一度 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 はどうですか? 私の変数が static の場合はどうなりますか?