Activity的四种加载模式(2)
startActivity(intent);
return super.onTouchEvent(event);
}
}
然后我们启动程序,开启Activity1,然后点击Acitivity1,启动另一个Activity1,然后再点击,再点击,再点击... 之后我们点返回键。
发生了什么事情?没错,我们按返回键返回一个又一个相同的Activity1。
standard是Activity默认的加载模式,这种方式用一个词来形容的话就是“拿来主义”。使用这种模式的Activity向所有使用它的Task声明:“我这里的这种Activity多着呢,谁需要的话我就给谁”。所以当一个Task请求加载这个Activity时,该Task直接实例化该Activity,并把它放到栈顶。
因此我们的例子就出现了这样的堆栈结构(假设我们点击了4次):
Activity1 |
Activity1 |
Activity1 |
Activity1 |
Activity1 |
我们设想一个情形:我们要做一个图片浏览器,第一个界面是图片列表界面(假设为PictureListActivity),第二个界面是浏览该张图片(假设为PictureViewActivity)。在PictureViewActivity中可以startActivity启动浏览界面浏览上一张和下一张。
如果每一张图片的浏览启动一个PictureViewActivity(当然你可能不是采用这种方式来浏览上一张和下一张,这里只是举个例子),如果采用standard模式的话,就会出现多个PictureViewActivity在堆栈中堆叠的情形。下面介绍的singleTop便可以解决这个问题。
“拒绝堆叠”——singleTop模式
我们将上面的例子稍加改动,AndroidManifest.xml中Acitivity1的launchMode改为singleTop,Activity1的代码修改如下:
Java代码
public class Activity1 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Activity1创建时显示Toast
Toast.makeText(this, "onCreate called!", Toast.LENGTH_SHORT).show();
}
@Override
protected void onNewIntent(Intent intent) {
setTitle("I am Activity1 too, but I called onNewIntent!");
相关新闻>>
- 发表评论
-
- 最新评论 更多>>