我有一个Android应用程序通过蓝牙接收消息(但这部分与此无关)。混乱是由处理程序接收的。在应用程序被Android任务管理器杀死后启动应用程序时,它可以正常工作。如果我不杀它并将它带回前面它就不会表现得那样。代码非常简单:
public class MainActivity extends Activity
{
private BtBase mBtBase;
private TextView mTvBluetooth;
private View mView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mBtBase = BtBase.getInstance(this, mHandler);
setContentView(R.layout.bluetooth);
}
@Override
protected void onResume()
{
super.onResume();
mTvBluetooth = (TextView) findViewById(R.id.tvBluetooth);
if(mBtBase.getErrorCode() == BtLibraryConstants.BT_CONNECTED)
{
mTvBluetooth.setText("Text 1");
}
else
{
mTvBluetooth.setText("Text 2");
}
}
private final Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 0:
if(msg.arg2 == 0)
{
Toast.makeText(getApplicationContext(), "Text 1", Toast.LENGTH_LONG).show();
mTvBluetooth.setText("Text 1.");
}
else if(msg.arg2 == 1)
{
Toast.makeText(getApplicationContext(), "Text 2", Toast.LENGTH_LONG).show();
mTvBluetooth.setText("Text 2");
}
break;
case 1:
Toast.makeText(getApplicationContext(), (String) msg.obj, Toast.LENGTH_LONG).show();
mTvBluetooth.setText("Text 3: " + (String) msg.obj);
break;
default:
}
}
};
}
从简历情况开始应用后,有什么工作:
从简历情况启动应用后,什么不起作用:
请记住toast正常工作,因此执行代码。请记住,从任务管理器中删除应用程序后它可以正常工作,所以这并非完全错误。我认为它与生命周期管理有关。
我尝试了几件事
两者都没有奏效,但当然我可能在这些尝试中做错了。
调试器显示我的textView mTvBluetooth不是null,看起来它是我正在寻找的那个。但也许新的mTvBluetooth是以某种方式创建的,而我正在使用旧的mTvBluetooth。
最后但并非最不重要的是,logCat不会显示任何错误。
答案 0 :(得分:0)
尝试移动此代码
mTvBluetooth = (TextView) findViewById(R.id.tvBluetooth);
从onResume()
到onCreate()
方法。也许有帮助。
此外,当以常见方式恢复活动时,不会重新创建TextView。
但有时可以销毁购买系统以获得更多内存。在这样的情况下,当您恢复活动时,必须在onCreate
之前调用方法onResume
。
如果您不想移动代码,请尝试制作mTvBluetooth volatile。 尝试在调试时查看mHandler和onResume()中的mTvBlutooth值。 在eclipse中使用“Inspect”工具(Ctrl + Shift + I),你会看到一个变量id,例如: 830032407656.在这两个时刻检查ID。
请留下评论,这是一个有用的答案。