بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

بستن یک برنامه در حال اجرا

مدیریت گفتگو
Criss 11 سال پیش
آخرین تغییر: 9 سال پیش

سلام دوستان <

من از این کد استفاده میکنم که firefox رو ببندم <

اما کار نمیکنه و firefox در لیست برنامه های باز می مونه

اگر کد مناسبی رو دارید ممنون میشم <

  ActivityManager servMng;
servMng = (ActivityManager) SWFActivity.this.getSystemService(SWFActivity.this.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list = servMng.getRunningAppProcesses();
if (list != null) {
String value1 = "org.mozilla.firefox";
String value2 = "org.mozilla.firefox.App";
for (int i = 0; i < list.size(); ++i) {
if (value1.matches(list.get(i).processName) || value2.matches(list.get(i).processName)) {
int pid1 = android.os.Process.getUidForName(value1);
int pid2 = android.os.Process.getUidForName(value2);
android.os.Process.killProcess(pid1);
android.os.Process.killProcess(pid2);
Toast.makeText(getApplicationContext(), value1 + pid1, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), value2 + pid2, Toast.LENGTH_SHORT).show();

 

 

نظرات

پاسخ‌ها 7

Criss 11 سال پیش

از این هم استفاده میکنم جواب نمیده <

 ActivityManager servMng;
servMng = (ActivityManager) SWFActivity.this.getSystemService(SWFActivity.this.ACTIVITY_SERVICE);
servMng.killBackgroundProcesses("com.freestyler.balls.criss");

 پرمیژن هم ست کردن <

 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
 

 

نظرات

Criss 11 سال پیش

هر بار که سوالی میپرسم

پدرم در میاد آخرش هم جوابش رو نصفه و نیمه خودم پیدا میکنم <

برنامه بخوبی کار میکنه و میتونه یک برنامه در حال اجرا رو با دستور زیر ببنده <

package com.freestyler.kill.criss;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class KillActivity extends Activity {

Button theButton;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
theButton = (Button) findViewById(R.id.button);
theButton.setOnClickListener(new Button.OnClickListener() {

@Override
public void onClick(View v)
{

ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
mActivityManager.killBackgroundProcesses("com.freestyler.balls.criss");

}
});
}
}

در واقع برنامه از لیست برنامه های موجود که در اکلیپس نمایش داده میشه بسته میشه <

اما از لیست مولتی تسکینگ (recent app) محیط اندروید خارج نمیشه <

برای این قسمت باید چکار کرد ؟

 

نظرات

Spirit 11 سال پیش
عوضش سوالاتت بوی اینو میده که داری برنامه نویسی میکنی، بقول استاد r&d هم میکنی، تنبل نیستی، مثل بعضی سوالات من و ...، بگذریم، اینم جستجو کردی؟ clear recent apps android programmatically
Criss 11 سال پیش
همین الان دارم همین کار رو میکنم < بهترین جوابی که داده شده اینه < لینک
Criss 11 سال پیش
من روی گوشی خودم تست کردم < android 5 < هر برنامه ای رو که خارج میشم < توی recent list میمونه ! :| چکار باید کرد ؟ پس چطوری از قیمت AppManager خود اندروید برنامه های در حال اجرا بسته می شوند ؟
Criss 11 سال پیش
یا خدا !! الان تست کردم < از قسمت Settings > Apps > pakage name > force Stop برنامه بسته میشه < اما توی recent apps میمونه ! (وسلام و علیکم و رحمه الله و برکاته - پدرم در اومد تازه جوابش رو پیدا کردم ! که نمیشه)
Spirit 11 سال پیش
حدس من اینه که این قسمت یعنی recents مثل یه برنامه جداست، و خارج از اون API اندروید هست و فقط دست کاربر هست، نشون به اون نشون که یه برنامه بود اسمش یادم نیست که با Xposed کار میکرد که یه نوتیفیکیشن دائمی داشت وقتی انتخابش میکردم لیست recents پاک میشد.
Criss 11 سال پیش

از صبح دارم سرچ میکنم ! چرا پس پیدا نمیشه ؟!

حتی اگر از این دستور توی CMD  استفاده بشه <

باز هم برنامه ها بسته میشن < اما توی مولتی تسینگ (recent app) اندروید باز میمونند !

 adb shell am kill-all

نظرات

Criss 11 سال پیش

کل بازار رو سرچ کردم < هیچ Task Manager که یه برنامه نویس ایرانی اون رو نوشته باشه وجود نداره !

توی github.com هم کلا چهارتا برنامه بیشتر وجود نداره که توی همشون از متد killBackgroundProcesses استفاده شده !

 

 لینک

نظرات

امید 10 سال پیش
سلام جوابش رو پیدا کردی که چجوری میشه برنامه رو بست ؟ منم الان به این کد احتیاج دارم، اگر پیدا کردی لطفا کمک کن ممنون
احمد 10 سال پیش

اقا منم الان همین مشکل را دارم برنامه که با دکمه home میره توی backgrund بسته نمیشه و دوباره که باز میشه کرش می کنه 

 package ir.na9os;

import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;

import my_class.G;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;


public class ActivityEnhanced extends Activity {

	private long time = 3000;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		G.CurrentActivity = this;

		appisrun();
    }


	private void appisrun() {
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				if (isApplicationSentToBackground(G.context)) {
					try {
						 kill_process();
					} catch (Exception e) {
						e.printStackTrace();
					}
					try {
						 killBackgroundProcesses(G.context);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}, time);
	}

	protected void killBackgroundProcesses(final Context context) {
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		activityManager.killBackgroundProcesses(G.PACKAGE_NAME);
		Log.i(G.APP_LOG, "delete app 3");

	}


	public static boolean isApplicationSentToBackground(final Context context) {
		ActivityManager am = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningTaskInfo> tasks = am.getRunningTasks(1);
		if (!tasks.isEmpty()) {
			for (int i = 0; i < tasks.size(); i++) {

				ComponentName topActivity = tasks.get(i).topActivity;
				if (!topActivity.getPackageName().equals(
						context.getPackageName())) {
					Log.i(G.APP_LOG, "delete app 1");
					return true;
				}
			}
		}

		return false;
	}

	protected void kill_process() {
		try {
			Process suProcess = Runtime.getRuntime().exec("su");
			DataOutputStream os = new DataOutputStream(
					suProcess.getOutputStream());
			os.writeBytes("adb shell" + "\n");
			os.flush();
			os.writeBytes("am force-stop ir.na9os" + "\n");
			os.flush();
			Log.i(G.APP_LOG, "delete app 2");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


	@Override
	protected void onPause() {
		super.onPause();
		appisrun();
	}

	@Override
	protected void onStop() {
		super.onStop();
		appisrun();
	}
    @Override
    protected void onResume() {
        super.onResume();
        G.CurrentActivity = this;
		appisrun();

    }
}

 

 

نظرات

Criss 10 سال پیش
دلیل کرش این هست که مقادیر استاتیک روی حافظه باقی میمونه ، درواقع توی این حالت اکتیوتی و تمام متغیر ها از بین میره ، اما اپلیکیشن و متغیر های استاتیک روی حافظه باقی میمونه ، بنابراین وقتی برنامه بالا میاد یکسری از متغیر مقادیر قبلی خودشون رو دارند بهتره از system.exist استفاده کنید و با بستن پروسه برنامه با استفاده از pid و البته میتونید مقادیر استاتیک خودتون رو توی ondestroy خالی کنید
احمد 10 سال پیش
دقیقا چطوری کریس بنویسمش
احمد 10 سال پیش

سلام دوستان اومدم بنویسم جواب این مشکل پیدا نکردم که یک دفعه درست شد کشفش کردم

کد AndroidManifest.xml: تقریبا برای همه اکتیویتی ها همین کد را استفاده کردم

      <activity
            android:name="com.myapp.ActivityFilter"
            android:autoRemoveFromRecents="true"
            android:excludeFromRecents="true"
            android:label="@string/app_name" >
        </activity>

کد کلاس ActivityEnhanced:

import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;

import my_class.G;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

public class ActivityEnhanced extends Activity {

	private long time = 5000;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		G.CurrentActivity = this;

		appisrun();
	}

	private void appisrun() {
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				if (isApplicationSentToBackground(G.context)) {
					try {
						kill_process();
						killapk();

					} catch (Exception e) {
						e.printStackTrace();
					}
					try {
						killapk();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}, time);
	}

	protected void killapk() {
		ActivityManager activityManager = (ActivityManager) G.context
				.getSystemService(ACTIVITY_SERVICE);
		activityManager.restartPackage(G.PACKAGE_NAME);
		killBackgroundProcesses(G.context);
	}

	protected void killBackgroundProcesses(final Context context) {
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		activityManager.killBackgroundProcesses(G.PACKAGE_NAME);
		System.exit(0);
		Log.i(G.APP_LOG, "delete app 3");

	}

	public static boolean isApplicationSentToBackground(final Context context) {
		ActivityManager am = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningTaskInfo> tasks = am.getRunningTasks(1);
		if (!tasks.isEmpty()) {
			for (int i = 0; i < tasks.size(); i++) {

				ComponentName topActivity = tasks.get(i).topActivity;
				if (!topActivity.getPackageName().equals(
						context.getPackageName())) {
					Log.i(G.APP_LOG, "delete app 1");
					return true;
				}
			}
		}

		return false;
	}

	protected void kill_process() {
		try {
			Process suProcess = Runtime.getRuntime().exec("su");
			DataOutputStream os = new DataOutputStream(
					suProcess.getOutputStream());
			os.writeBytes("adb shell" + "\n");
			os.flush();
			os.writeBytes("am force-stop " + G.PACKAGE_NAME + " \n");
			os.flush();
			Log.i(G.APP_LOG, "delete app 2");
			System.exit(0);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@Override
	protected void onPause() {
		super.onPause();
		appisrun();
	}

	@Override
	protected void onStop() {
		super.onStop();
		appisrun();
	}

	@Override
	protected void onResume() {
		super.onResume();
		G.CurrentActivity = this;
		appisrun();

	}
}

داخل کلاس G هم:

 public static String PACKAGE_NAME;


@Override public void onCreate() { super.onCreate(); PACKAGE_NAME = getApplicationContext().getPackageName(); context = getApplicationContext(); layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

دسترسی های مورد نیاز:

 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission android:name="android.permission.GET_TASKS" />

نظرات

احمد 10 سال پیش
این جوری هم کامل بسته میشه هم توی لیست برنامه های اخیرا اجرا شده نیست با تشکر از دوست فعالمون کریس
احمد 10 سال پیش
دسترسی ها را هم اضافه کردم
mosafer 9 سال پیش

اینم یه روش دیگه که اگه بخواید برنامتون کلا از لیست recent apps نمایش داده نشه!

ت منیفست برنامتون :

  <activity
android:name=".ActivityMainKioskMode"
android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

اینو اضافه کنید :

<category android:name="android.intent.category.HOME" /> <!-- recent apps برای پاک کردن برنامه از لیست -->



</intent-filter>


</activity>

 

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .