最近在写一个微博应用,需要用到OAuth授权,机制是这样的,先是客户端向服务器请求一个oauth_token,再根据这个oauth_token构造一个让用户授权的URL,转到浏览器,在浏览器中打开,让用户输入帐号密码.然后通过设置自定义协议让浏览器返回时转到指定的Activity.之前跳转到浏览器和让浏览器返回启动的是同一个Activity,但是发现,浏览器返回时不是调用已启动的Activity的 OnNewIntent 方法,而是重新启动一个实例,导致内存中有两个该Activity实例.通过设置android:launchMode解决:
<activity android:name=".Main" android:label="@string/app_name" android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="qweibo4android" android:host="OAuthActivity" />
</intent-filter>
</activity>