zoukankan      html  css  js  c++  java
  • Android onNewIntent

    本文转自:http://blog.csdn.net/tyj1982/article/details/6848879

    在Android应用程序开发的时候,从一个Activity启动另一个Activity并传递一些数据到新的Activity上非常简单,但是当您需要让后台运行的Activity回到前台并传递一些数据可能就会存在一点点小问题。

    首先,在默认情况下,当您通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。为了不让Activity实例化多次,我们需要通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式,如下所示:

    <activity android:label="@string/app_name" android:launchmode="singleTask"
    android:name="Activity1">
     </activity>

    launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:

     protected void onNewIntent(Intent intent) {
    
        super.onNewIntent(intent);
    
        setIntent(intent);//must store the new intent unless getIntent() will return the old one
    
         processExtraData();
    
        }

    不要忘记,系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法,如下所示:

    public void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.main);
    
        processExtraData();
    
         }
    
         protected void onNewIntent(Intent intent) {
    
         super.onNewIntent(intent);
    
         setIntent(intent);//must store the new intent unless getIntent() will return the old one
    
         processExtraData()
    
         }
    
         
    
         private void processExtraData(){
    
         Intent intent = getIntent();
    
         //use the data received here
    
        }

    同时结合自己转载的另一篇文章http://blog.csdn.net/beifengdelei/article/details/7316253

    onCreate是用来创建一个Activity也就是创建一个窗体,但一个Activty处于任务栈的顶端,若再次调用startActivity去创建它,则不会再次创建。若你想利用已有的Acivity去处理别的Intent时,你就可以利用onNewIntent来处理。在onNewIntent里面就会获得新的Intent.

    @Override
            protected void onNewIntent(Intent intent) {
                    // TODO Auto-generated method stub
                    super.onNewIntent(intent); 
            }

    如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于
    onPause
    onStop 状态的话
    其他应用再发送Intent的话,执行顺序为:
    onNewIntent
    onRestart
    onStart
    onResume

  • 相关阅读:
    Android Studio 开发
    Jsp编写的页面如何适应手机浏览器页面
    电影
    Oracle 拆分列为多行 Splitting string into multiple rows in Oracle
    sql server 2008 自动备份
    WINGIDE 激活失败
    python安装 错误 “User installations are disabled via policy on the machine”
    ble编程-外设发送数据到中心
    iOS开发-NSString去掉所有换行及空格
    ios9 字符串与UTF-8 互相转换
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/3140166.html
Copyright © 2011-2022 走看看