如题。

解决方案 »

  1.   

    只要这个Activity不被Destory就不会被重新create。
      

  2.   

    研究下Activity的声明周期吧,写个Demo把onPause(),onRestart(),onStart(),onResume(),onStop(),onDestroy(),onCreate()这些函数都重载在里面加些打印信息,创建几个Activity切换看看,观察下打印信息。
      

  3.   

     如何不让Destory 你说的生命周期我都知道 
      

  4.   

    Destory是由系统控制的,不办法控制不让它Destory,只能让它Destory的优先级降低
      

  5.   

    把activity已经设置过singleTask, singleInstance 等, 为啥还是无效? 
      

  6.   


    肯定无效。你没办法控制一个activity被系统destory,但是系统destory你的时候,会调用onDestroy方法。
      

  7.   

     那我只想create一次还能实现?
      

  8.   

    task可以理解为一个栈singleTask,singleInstance都是该activity只有一个实例,相当于单态。
    被标记为singleTask或者singleInstance的activity都在task的底部,在同一时间内,一个设备上不会有超过1个包含的这种类型的activity的task
    一个被标记为singleInstance的activity在启动时,如果传过来的intent中有FLAG_ACTIVITY_NEW_TASK标记,则它会被放入一个新的task,除此之外,都与singleTask相同。详见android官方文档中dev guide中Application Fundamentals那部分,其中有讲的。要让自己的activity尽量不被销毁,只有想办法提高优先级,比如绑定一个运行中的service,或者虽然用户看不见了,但是它还是能影响的界面上显示的东西(这点不知道怎么做,文档中没详细说)。最变态的是让你的activity一直处于onCreate()     onRestart()  onStart()  onResume()之一中因为当activity处于以上方法之一时是无法被kill的。
      

  9.   


    android 例子appdemos中一个本地service的例子。这里的activity优先级就高,但无论多高的优先级都不能保证不被销毁,除非是linux内核的东西。
    看例子吧,不知道是不是有你想要的,看bingding那个内部类的东西就行了/*
     * Copyright (C) 2007 The Android Open Source Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */package com.example.android.apis.app;import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    import android.util.Log;
    import android.widget.Toast;// Need the following import to get access to the app resources, since this
    // class is in a sub-package.
    import com.example.android.apis.R;/**
     * This is an example of implementing an application service that runs locally
     * in the same process as the application.  The {@link LocalServiceActivities.Controller}
     * and {@link LocalServiceActivities.Binding} classes show how to interact with the
     * service.
     *
     * <p>Notice the use of the {@link NotificationManager} when interesting things
     * happen in the service.  This is generally how background services should
     * interact with the user, rather than doing something more disruptive such as
     * calling startActivity().
     */public class LocalService extends Service {
        private NotificationManager mNM;    /**
         * Class for clients to access.  Because we know this service always
         * runs in the same process as its clients, we don't need to deal with
         * IPC.
         */
        public class LocalBinder extends Binder {
            LocalService getService() {
                return LocalService.this;
            }
        }
        
        @Override
        public void onCreate() {
            mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);        // Display a notification about us starting.  We put an icon in the status bar.
            showNotification();
        }    @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.i("LocalService", "Received start id " + startId + ": " + intent);
            // We want this service to continue running until it is explicitly
            // stopped, so return sticky.
            return START_STICKY;
        }    @Override
        public void onDestroy() {
            // Cancel the persistent notification.
            mNM.cancel(R.string.local_service_started);        // Tell the user we stopped.
            Toast.makeText(this, R.string.local_service_stopped, Toast.LENGTH_SHORT).show();
        }    @Override
        public IBinder onBind(Intent intent) {
            return mBinder;
        }    // This is the object that receives interactions from clients.  See
        // RemoteService for a more complete example.
        private final IBinder mBinder = new LocalBinder();    /**
         * Show a notification while this service is running.
         */
        private void showNotification() {
            // In this sample, we'll use the same text for the ticker and the expanded notification
            CharSequence text = getText(R.string.local_service_started);        // Set the icon, scrolling text and timestamp
            Notification notification = new Notification(R.drawable.stat_sample, text,
                    System.currentTimeMillis());        // The PendingIntent to launch our activity if the user selects this notification
            PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                    new Intent(this, LocalServiceActivities.Controller.class), 0);        // Set the info for the views that show in the notification panel.
            notification.setLatestEventInfo(this, getText(R.string.local_service_label),
                           text, contentIntent);        // Send the notification.
            // We use a layout id because it is a unique number.  We use it later to cancel.
            mNM.notify(R.string.local_service_started, notification);
        }
    }
      

  10.   

    /*
     * Copyright (C) 2007 The Android Open Source Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */package com.example.android.apis.app;import com.example.android.apis.R;import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;public class LocalServiceActivities {
        /**
         * <p>Example of explicitly starting and stopping the local service.
         * This demonstrates the implementation of a service that runs in the same
         * process as the rest of the application, which is explicitly started and stopped
         * as desired.</p>
         * 
         * <p>Note that this is implemented as an inner class only keep the sample
         * all together; typically this code would appear in some separate class.
         */
        public static class Controller extends Activity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);            setContentView(R.layout.local_service_controller);            // Watch for button clicks.
                Button button = (Button)findViewById(R.id.start);
                button.setOnClickListener(mStartListener);
                button = (Button)findViewById(R.id.stop);
                button.setOnClickListener(mStopListener);
            }        private OnClickListener mStartListener = new OnClickListener() {
                public void onClick(View v) {
                    // Make sure the service is started.  It will continue running
                    // until someone calls stopService().  The Intent we use to find
                    // the service explicitly specifies our service component, because
                    // we want it running in our own process and don't want other
                    // applications to replace it.
                    startService(new Intent(Controller.this,
                            LocalService.class));
                }
            };        private OnClickListener mStopListener = new OnClickListener() {
                public void onClick(View v) {
                    // Cancel a previous call to startService().  Note that the
                    // service will not actually stop at this point if there are
                    // still bound clients.
                    stopService(new Intent(Controller.this,
                            LocalService.class));
                }
            };
        }    // ----------------------------------------------------------------------    /**
         * Example of binding and unbinding to the local service.
         * This demonstrates the implementation of a service which the client will
         * bind to, receiving an object through which it can communicate with the service.</p>
         * 
         * <p>Note that this is implemented as an inner class only keep the sample
         * all together; typically this code would appear in some separate class.
         */
        public static class Binding extends Activity {
            private boolean mIsBound;
            private LocalService mBoundService;
            
            private ServiceConnection mConnection = new ServiceConnection() {
                public void onServiceConnected(ComponentName className, IBinder service) {
                    // This is called when the connection with the service has been
                    // established, giving us the service object we can use to
                    // interact with the service.  Because we have bound to a explicit
                    // service that we know is running in our own process, we can
                    // cast its IBinder to a concrete class and directly access it.
                    mBoundService = ((LocalService.LocalBinder)service).getService();
                    
                    // Tell the user about this for our demo.
                    Toast.makeText(Binding.this, R.string.local_service_connected,
                            Toast.LENGTH_SHORT).show();
                }            public void onServiceDisconnected(ComponentName className) {
                    // This is called when the connection with the service has been
                    // unexpectedly disconnected -- that is, its process crashed.
                    // Because it is running in our same process, we should never
                    // see this happen.
                    mBoundService = null;
                    Toast.makeText(Binding.this, R.string.local_service_disconnected,
                            Toast.LENGTH_SHORT).show();
                }
            };
            
            void doBindService() {
                // Establish a connection with the service.  We use an explicit
                // class name because we want a specific service implementation that
                // we know will be running in our own process (and thus won't be
                // supporting component replacement by other applications).
                bindService(new Intent(Binding.this, 
                        LocalService.class), mConnection, Context.BIND_AUTO_CREATE);
                mIsBound = true;
            }
            
            void doUnbindService() {
                if (mIsBound) {
                    // Detach our existing connection.
                    unbindService(mConnection);
                    mIsBound = false;
                }
            }
            
            @Override
            protected void onDestroy() {
                super.onDestroy();
                doUnbindService();
            }
            private OnClickListener mBindListener = new OnClickListener() {
                public void onClick(View v) {
                    doBindService();
                }
            };        private OnClickListener mUnbindListener = new OnClickListener() {
                public void onClick(View v) {
                    doUnbindService();
                }
            };
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);            setContentView(R.layout.local_service_binding);            // Watch for button clicks.
                Button button = (Button)findViewById(R.id.bind);
                button.setOnClickListener(mBindListener);
                button = (Button)findViewById(R.id.unbind);
                button.setOnClickListener(mUnbindListener);
            }
        }
    }
      

  11.   

    其实问题是这样的,我要实现一个拖拽的动作,执行完,我想让他停留在原先的位置。 所以想create一次。 因为再次加载的话,在oncreate里面是无法设置坐标的
      

  12.   

    不调用destroy自然就不会再调用OnCreate,当你处理别的activity的时候,把这个设置成OnPause状态就可以了