android中同一个应用程序的多个实例

时间:2016-02-19 13:38:35

标签: android

如何在图库应用内共享图片时使用已经运行的应用? 它总是创建已经运行的应用程序的单独实例。 我在whatsapp应用程序中发现了同样的问题。

1 个答案:

答案 0 :(得分:3)

是的。另一个用例是当你点击notification.it将启动一个新的实例,如果该应用已经在后台。

使用android:launchMode

<activity android:launchMode = ["standard" | "singleTop" | "singleTask" | "singleInstance"] ../>

所以使用"singleTop" 来自docs:

如果活动的实例已存在于当前任务的顶部,则系统通过调用其onNewIntent()方法将意图路由到该实例,而不是创建活动的新实例。活动可以多次实例化,每个实例可以属于不同的任务,一个任务可以有多个实例(但只有当后端堆栈顶部的活动不是活动的现有实例时)。

请阅读以下博客文章

http://127.0.0.1/xyz

http://inthecheesefactory.com/blog/understand-android-activity-launchmode/en

编辑:在OnResume之前,它将调用OnActivityResult。已选择数据

Intent intent = new Intent();

    intent.setType("image/jpeg");
            intent.setAction(Intent.ACTION_GET_CONTENT);

            startActivityForResult(Intent.createChooser(intent,
                    "Select Image From Gallery"),
                    10000);


    @Override
        protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
Uri originalUri = null;
        if (resultCode == Activity.RESULT_OK) {
    if (requestCode == 10000) {

                    if (data.getData() != null) {
                        originalUri = data.getData();
                        //originaluri is your selected image path.


                    }}}

并在我们的应用程序中获取Intent Filter Action。

void onCreate (Bundle savedInstanceState) {
    ...
    // Get intent, action and MIME type
    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            handleSendText(intent); // Handle text being sent
        } else if (type.startsWith("image/")) {
            handleSendImage(intent); // Handle single image being sent
        }
    } 

https://www.mobomo.com/2011/06/android-understanding-activity-launchmode/ http://developer.android.com/training/sharing/receive.html

或者如果您使用的是launchmode- singleTop。只需覆盖 onNewIntent

 @Override
    protected void onNewIntent(Intent intent) {


        super.onNewIntent(intent);

    }