2015-08-10 4 views
-3

Hy каждый, я новичок, и у меня есть, как знать. пожалуйста помогите.Как запустить два процесса в одном приложении?

  1. начать два процесса в одном приложении. Я создаю AppLock
  2. Создавать приложение AppLock. если пользователь один процесс останавливает/убивает, то второй процесс запускает его. сообщите мне, что это действительно или нет, если не действителен, тогда скажите мне правильный способ запуска приложения после принудительной остановки/убийства. благодаря Редактировать

3) можно перезапустить приложение после остановки с IntentService. Я прочитал Намерение запустить сервис косяк на Мэйн тему

+0

Я свежее, пожалуйста, дайте мне правильный путь, а не проголосовать. SO предназначено для обучения –

+1

SO - это помощь тем, кто пытается учиться, а не обучать тех, кто не хочет учиться самостоятельно. Вы не показали нам ничего, что продемонстрировало бы ваши усилия с этой целью, никто здесь не напишет вам код - но мы с радостью поможем вам с фиксацией существующего – Chaosit

+0

Я попытался с широковещательным приемником в методе обслуживания (onDestroy) –

ответ

0

Смотреть это: https://stackoverflow.com/a/6567878/850347

Вы можете сделать больше, чем один процесс, используя настройки ниже.

android:process=":remote" 

Edit1

Хорошо.
Шаг 1: Сделайте приложение, имеющее один локальный процесс, один глобальный процесс.

AndroidManifest.xml Обратите внимание: установка заглавной буквы для имени процесса делает локальный процесс, а имя процесса с маленькими буквами делает глобальный процесс.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.kou.processtest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="18" 
     android:targetSdkVersion="18" /> 

    <application> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".LocalProcessActivity" 
      android:process=":Local1" /> 
     <activity 
      android:name=".GlobalProcessActivity" 
      android:process=".global1" /> 
    </application> 

</manifest> 

MainActivity.java

package com.kou.processtest; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ((Button) findViewById(R.id.btn1)).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, GlobalProcessActivity.class); 
       startActivity(intent); 
      } 
     }); 

    } 

} 

GlobalProcessActivity.java

package com.kou.processtest; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class GlobalProcessActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_global_process); 

     ((Button) findViewById(R.id.btn1)).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(GlobalProcessActivity.this, LocalProcessActivity.class); 
       startActivity(intent); 
      } 
     }); 

    } 
} 

LocalProcessActivity.java

package com.kou.processtest; 

import android.app.Activity; 
import android.os.Bundle; 

public class LocalProcessActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_local_process); 
    } 
} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="${packageName}.${activityClass}" > 

    <Button 
     android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="run global process" /> 

</RelativeLayout> 

activity_global_process.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="${packageName}.${activityClass}" > 

    <Button 
     android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="run local process" /> 

</RelativeLayout> 

activity_local_process.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="${packageName}.${activityClass}" > 

    <Button 
     android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="nothing" /> 

</RelativeLayout> 


Шаг 2: Запустить приложение. нажмите кнопку для запуска глобальной активности процесса и локальной активности процесса.

Этап 3: Проверить процесс по adb shell, ps. Вы можете увидеть три процесса.

C:\>adb shell ps 
u0_a678 19654 2019 553956 33848 ffffffff 00000000 S com.kou.processtest 
u0_a678 19680 2019 553952 34008 ffffffff 00000000 S .global1 
u0_a678 19701 2019 558020 33588 ffffffff 00000000 S com.kou.processtest:Local1 

Step4: убийство приложения на меню настроек. Настройки - App - Информация о приложении - Силовой останов

Шаг 5: Запустите ps снова.

Результат: весь процесс был убит.
com.kou.processtest и .global1 и com.kou.processtest: Local1 был убит.

+0

если приложение останавливается, тогда все процессы останавливаются или нет @Stanley Kou ?? –

+0

Спасибо, что предоставил правильный путь –

+0

@bobjeffer Это поможет вам: http://stackoverflow.com/a/27963774/850347 ** Сначала **, не разрешайте краху приложения. И ваш удаленный процесс не будет терпеть крах, если крах приложения, но это зависит от его состояния. И поскольку ваш удаленный процесс будет связываться с вашим приложением, ваше приложение не будет работать должным образом. Вы можете увидеть детали: http://developer.android.com/guide/components/processes-and-threads.html http://developer.android.com/guide/topics/processes/process-lifecycle .html –

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