0

У меня есть поток, который начинается при нажатии кнопки. Тема содержит прослушиватели вещания и операции, связанные с wifi Direct, и, наконец, подключает устройство Android к поисковому узлу, я хочу знать, как много времени моя нить будет жива ?? Мой класс резьбы:Время жизни в андроиде

public class ConnectPeers extends Thread { 



     private List<WifiP2pDevice> deviceList = new ArrayList<WifiP2pDevice>(); 
     Context mContext; 
     private static final String TAG = "MainWiFiDirectActivity"; 
     WifiP2pManager wifiP2pManager; 
     Channel wifiDirectChannel; 
     IntentFilter peerfilter; 
     IntentFilter connectionfilter; 
     IntentFilter p2pEnabled; 
     public ConnectPeers(Context mContext) { 
     // TODO Auto-generated constructor stub 

      this.mContext = mContext; 

    } 
     /** 
      * Listing 16-19: Creating a WiFi P2P Manager Action Listener 
      */ 
      private ActionListener actionListener = new ActionListener() { 
      public void onFailure(int reason) { 

      // Toast.makeText(getApplicationContext(),"wifi direct reason"+String.valueOf(reason),Toast.LENGTH_SHORT).show(); 
       String errorMessage = "WiFi Direct Failed: "; 
       switch (reason) { 
       case WifiP2pManager.BUSY : 
        errorMessage += "Framework busy."; 
       // Toast.makeText(getApplicationContext(),errorMessage+String.valueOf(reason),Toast.LENGTH_SHORT).show(); 

        break; 
       case WifiP2pManager.ERROR : 
        errorMessage += "Internal error."; 
      //  Toast.makeText(getApplicationContext(),errorMessage+String.valueOf(reason),Toast.LENGTH_SHORT).show(); 
        break; 
       case WifiP2pManager.P2P_UNSUPPORTED : 
        errorMessage += "Unsupported."; 
      //  Toast.makeText(getApplicationContext(),errorMessage+String.valueOf(reason),Toast.LENGTH_SHORT).show(); 
        break; 
       default: 
        errorMessage += "Unknown error."; 
        break; 
       } 
       Log.d(TAG, errorMessage); 
      } 
      public void onSuccess() { 
        // Success! 
        // Return values will be returned using a Broadcast Intent 
       } 
       }; 

      /** 
      * Listing 16-18: Initializing Wi-Fi Direct 
      */ 
     private void initializeWiFiDirect() { 
       wifiP2pManager = 
        (WifiP2pManager)mContext.getSystemService(Context.WIFI_P2P_SERVICE); 

       wifiDirectChannel = wifiP2pManager.initialize(mContext,mContext.getMainLooper(), 
        new ChannelListener() { 
        public void onChannelDisconnected() { 
        initializeWiFiDirect(); 
        } 
        } 
       ); 
       } 
     /** 
      * Listing 16-21: Receiving a Wi-Fi Direct status change 
      */ 
      BroadcastReceiver p2pStatusReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       int WiFiDirectState = intent.getIntExtra(
       WifiP2pManager.EXTRA_WIFI_STATE, 
       WifiP2pManager.WIFI_P2P_STATE_DISABLED); 

       switch (WiFiDirectState) { 
       case (WifiP2pManager.WIFI_P2P_STATE_ENABLED): 
       Toast.makeText(mContext,String.valueOf(WiFiDirectState), Toast.LENGTH_SHORT).show(); 
       discoverPeers(); 
       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         if(!deviceList.isEmpty()) 
         { 
           connectTo(deviceList.get(0)); 

         } 
        } 
       }, 4000); 

        break; 
       default: 

       } 
      } 
      }; 
      /** 
      * Listing 16-22: Discovering Wi-Fi Direct peers 
      */ 
      private void discoverPeers() { 
      wifiP2pManager.discoverPeers(wifiDirectChannel, actionListener); 
      } 

      BroadcastReceiver peerDiscoveryReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       wifiP2pManager.requestPeers(wifiDirectChannel, 
       new PeerListListener() { 
        public void onPeersAvailable(WifiP2pDeviceList peers) { 
        deviceList.clear(); 

        deviceList.addAll(peers.getDeviceList()); 

        } 
       }); 
       Toast.makeText(mContext,"discovery called", Toast.LENGTH_SHORT).show(); 

      } 

      }; 
      /** 
      * Listing 16-23: Requesting a connection to a Wi-Fi Direct peer 
      */ 
      void connectTo(WifiP2pDevice device) { 
      WifiP2pConfig config = new WifiP2pConfig(); 
      config.deviceAddress = device.deviceAddress; 
      config.groupOwnerIntent=15; 
      // if(device.status==0) 
      wifiP2pManager.connect(wifiDirectChannel, config, actionListener); 
      Toast.makeText(mContext,"Connect to", Toast.LENGTH_SHORT).show(); 

//  wifiP2pManager.createGroup(wifiDirectChannel, actionListener); 
      } 
      /** 
      * Listing 16-24: Connecting to a Wi-Fi Direct peer 
      */ 
      BroadcastReceiver connectionChangedReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 

       // Extract the NetworkInfo 
       String extraKey = WifiP2pManager.EXTRA_NETWORK_INFO; 
       NetworkInfo networkInfo = 
       (NetworkInfo)intent.getParcelableExtra(extraKey); 

       // Check if we're connected 
       if (networkInfo.isConnected()) { 
       wifiP2pManager.requestConnectionInfo(wifiDirectChannel, 
        new ConnectionInfoListener() { 
        public void onConnectionInfoAvailable(WifiP2pInfo info) { 
         // If the connection is established 
         if (info.groupFormed) { 
         // If we're the server 
         if (info.isGroupOwner) { 
          // TODO Initiate server socket. 
         // initiateServerSocket(); 

          Toast.makeText(mContext,"server"+info.groupOwnerAddress.toString(), Toast.LENGTH_LONG).show(); 

         } 
         // If we're the client 
         else if (info.groupFormed) { 
          // TODO Initiate client socket. 
         // initiateClientSocket(info.groupOwnerAddress.toString()); 

          Toast.makeText(mContext,"client"+info.groupOwnerAddress.toString(), Toast.LENGTH_LONG).show(); 

         } 
         } 
        } 
        }); 
       } else { 
       Log.d(TAG, "Wi-Fi Direct Disconnected"); 
       } 
      } 
      }; 
     @Override 
      public void run() { 

      initializeWiFiDirect();  
       peerfilter = new IntentFilter(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); 
       connectionfilter = new IntentFilter(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); 
       p2pEnabled = new IntentFilter(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); 

       // When you are done 
      mContext. registerReceiver(peerDiscoveryReceiver, peerfilter); 
      mContext. registerReceiver(connectionChangedReceiver, connectionfilter); 
      mContext. registerReceiver(p2pStatusReceiver, p2pEnabled); 
     } 

} 
+0

Вы можете найти что-то здесь http://stackoverflow.com/questions/7363666/android-asynctask-and-thread-life-cycle – Triode

+0

Почему бы вам не поставить таймер (один в начале) и измерить это время несколько раз в разных местах, затем разделите сумму на общую сумму попыток и посмотрите. Я не думаю, что кто-то может дать вам даже приблизительное значение, но формулу в лучшем сценарии. – g00dy

+0

Чтобы упростить жизнь, андроид дает 'AyncTask', который вы можете использовать здесь. См. Http://developer.android.com/reference/android/os/AsyncTask.html. – guptakvgaurav

ответ

0

Если вам нужно знать, когда ваш поток заканчивается, вы можете передать его Handler и и отправьте сообщение на mainActivity, когда ваш поток завершается (то есть: в конце методы выполнения)

Если вы хотите знать, сколько времени потребуется перед запуском, я не думаю, что вы можете это сделать точно.

Смежные вопросы