2012-07-05 57 views
0

首先,我是很新的Android和Java世界(从C/C++/Objective-C的推出)。 我试图整合Android Bump API(3.0,最新版本),但我遇到了麻烦。 我复制了这个例子,它在Android 2.2下工作正常,凹凸服务启动正确,但是对于Android 3.0和上层它不起作用。 我有一个例外(在主线程一个网络)加载我的活动时,我知道这个例外,以及如何避免它,但在这种情况下,凹凸状态,他们跑他们的API在自己的线程,所以我不要”我真的知道我为什么得到它。他们说你不需要运行一个或多个任务。Android的凹凸阿比网络上的主线程异常

这里是我的活动的样本上api.configure连接服务过程中发生

public class BumpActivity extends Activity { 
private IBumpAPI api; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.bump); 

    bindService(new Intent(IBumpAPI.class.getName()), connection, 
      Context.BIND_AUTO_CREATE); 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction(BumpAPIIntents.CHANNEL_CONFIRMED); 
    filter.addAction(BumpAPIIntents.DATA_RECEIVED); 
    filter.addAction(BumpAPIIntents.NOT_MATCHED); 
    filter.addAction(BumpAPIIntents.MATCHED); 
    filter.addAction(BumpAPIIntents.CONNECTED); 
    registerReceiver(receiver, filter); 



} 


@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

private final ServiceConnection connection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName className, IBinder binder) { 

     Log.i("BumpTest", "onServiceConnected"); 
     api = IBumpAPI.Stub.asInterface(binder); 
     try { 
      api.configure("API_KEY", "Bump User"); 
     } catch (RemoteException e) { 
      Log.w("BumpTest", e); 
     } 
     Log.d("Bump Test", "Service connected"); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName className) { 
     Log.d("Bump Test", "Service disconnected"); 
    } 
}; 
} 

听起来像问题.... 我应该在一个单独的线程或它自己的AsynchTask运行,但那又如何?为什么?在后台进程

回答

2

我在这个问题上停留了一天左右......而在文章发布后2分钟,我解决了它...... 我只是把api.configure放在一个单独的线程上(比AsynchTask短)。

private final ServiceConnection connection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName className, IBinder binder) { 

     Log.i("BumpTest", "onServiceConnected"); 
     api = IBumpAPI.Stub.asInterface(binder); 
     new Thread() { 
      public void run() { 
       try { 
        api.configure("API_KEY", 
          "Bump User"); 
       } catch (RemoteException e) { 
        Log.w("BumpTest", e); 
       } 

      } 
     }.start(); 

     Log.d("Bump Test", "Service connected"); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName className) { 
     Log.d("Bump Test", "Service disconnected"); 
    } 
}; 
0

制作要求。

+0

其实我已经找到了答案,我被困在这个问题一天......从字面上2分钟张贴后,我解决它... :) – Dimillian 2012-07-05 09:08:04

+0

所以你有什么解决办法吗? – 2012-07-05 09:09:35

+0

我张贴:)只是一个单独的线程 – Dimillian 2012-07-05 09:14:27

0

在主线程一个例外,在网络中的2.2和3.0及以上正在发生,所不同的是,在3.0及以上版本,他们迫使你把涉及在不同的线程一些重或慢OPS的一切,就像你说的在一个asyncTask。

你只需要创建一个内部asyncTask并在其onBackground方法把你的api.configure :)

class LoadBumpAsyncTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
     api.configure("9b17d663752843a1bfa4cc72d309339e", "Bump User"); 
    } catch (RemoteException e) { 
     Log.w("BumpTest", e); 
    } 
     return null; 
    } 

} 

只需拨打连接您的服务new LoadBumpAsyncTask().execute(),并将努力。

+0

好的,谢谢,我贴我的解决方案,简单的事实。 – Dimillian 2012-07-05 09:10:09

相关问题